前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据类型判断Object.prototype.toString.call

数据类型判断Object.prototype.toString.call

作者头像
wade
发布2020-04-24 13:06:27
9190
发布2020-04-24 13:06:27
举报
文章被收录于专栏:coding个人笔记

越学习越觉得基础的不牢固,不懂的,摸棱两可的,学了忘了的,在从入门到放弃的路上一直走着。今天分享一下数据类型判断的方法。

代码语言:javascript
复制
typeof:

很简单的使用,可以区分基础数据类型string、boolean、number、null、undefined、symbol,缺点就是没办法判断对象object:

代码语言:javascript
复制
console.log(typeof Symbol(''));//symbol
console.log(typeof 1);//number
console.log(typeof 's');//string
console.log(typeof undefined);//undefined
console.log(typeof true);//boolean
console.log(typeof function () {});//function
console.log(typeof null);//object
console.log(typeof {});//object
console.log(typeof []);//object
instanceof:

检测一个引用数据类型属于的类,检测构造函数的 prototype 属性是否出现在某个实例对象的原型链,要注意,是检测引用数据类型,基础数据类型不能检测(引用数据类型也都是Object的子类):

代码语言:javascript
复制
console.log(1 instanceof Number);//false
console.log('s' instanceof String);//false
console.log(true instanceof Boolean);//false
console.log(Function instanceof Function);//true
console.log(Function instanceof Object);//true
console.log([] instanceof Array);//true
console.log([] instanceof Object);//true
console.log({} instanceof Object);//true
function User() {};
let user = new User();
console.log(user instanceof User);//true
constructor:

判断由谁构造出来的,几乎不会使用:

代码语言:javascript
复制
let a = 1;
console.log(a.constructor === Number);//true
console.log(true.constructor === Boolean);//true
console.log('s'.constructor === String);//true
console.log([].constructor === Array);//true
console.log([].constructor === Object);//false
console.log(function () {}.constructor === Function);//true
console.log(function () {}.constructor === Object);//false
console.log({}.constructor === Object);//true
function User() {};
let user = new User();
console.log(user.constructor ===  User);//true
console.log(user.constructor ===  Object);//false
Objectprototype.toString.call/apply:

先明确一下,所有的子类都有toString方法,而Object.prototype上的toString是最原始的方法。对于所有数据类型,多少有些重写了toString方法,所以调用toString返回的跟Object.prototype.toString返回的不一样。比如undefined和null没有对应的构造函数,调用toString语法错误,函数调用toString得到的是函数代码,数组调用toString得到逗号分隔的字符串等。

而任何数据类型通过改变this都可以调用Object.prototype.toString:

代码语言:javascript
复制
console.log(Object.prototype.toString.call('s'));//[object String]
console.log(Object.prototype.toString.call(1));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call({}));//[object Object]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call(Math));//[object Math]
console.log(Object.prototype.toString.call(window));//[object Window]

之前也分享过,toString方法我们也可以重写,所以使用Object.prototype.toString.call判断数据类型是最合理的。对于toString方法,不同类型调用之后会产生什么结果,建议去了解一波,真的有点重要。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 coding个人笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档