一.typeof
typeof操作符返回一个用来表示数据类型的字符串,注意typeof运算之后的结果都是字符串类型的
注意:typeof是一个操作符,不是一个函数!
- 1.“string” 值是字符串
- 2.“boolean” 值是布尔值
- 3.“number” 值是数值
- 4.“undefined” 值未定义
- 5.“object” 值是对象,数组或null
- 6.“function” 值是函数
- 7.“symbol” 值是Symbol
1 优点
只能检测出,,,,,,
2.缺点
- 基本数据类型,null返回object 其他都可以返回正确结果
- 引用数据类型,除了function以外,都返回object
- function返回function类型
二.instanceof
语法: object instanceof 构造函数
返回值:如果是这个构造函数构造出来的,返回true,否则返回false。
得出一个结论:,无法检测基本数据类型,因为内部机制是通过判断对象的原型链中是不是能找到类型的 prototype。
并且也无法检测undefined和null ,因为他们两个比较特殊,使用instanceof检测时,浏览器根本不识别,会报错
1.优点
- 可以检测出某特定的引用类型具体是某种类型
2.缺点
- 只能检测引用类型
三.constructor
每个对象都有一个隐藏属性constructor,该属性指向对象的构造函数(类)
1.优点
- 基本上基本数据类型和引用数据类型都可以检测,但是除了自定义的对象外
2.缺点
- 为什么说除了自定义对象外都可以检测 ,因为检测自定义对象时不可靠!具体原因参考参考用constructor来做类型识别,并不可靠
- 函数的 constructor 是不稳定的,这个主要体现在自定义对象上,当开发者重写 prototype 后,原有的 constructor 引用会丢失,constructor 会默认为 Object
- undefined和null无法检测
四.Object.prototype.toString.call()
jQuery就是通过这种方式来判断的!
1.优点
- 基本上的数据类型都可以检测
2.缺点
- 自定义的类是不能准确判断的,这里可以采用instanceof
3,扩展
我们发现上面打印[object String]类似这种不太完美,比如我想直接打印string呢
封装一个函数,实际上得到的是一个字符串,只要我们对他进行截取即可,然后转为小写,就可以得到我们想要的结果,与typeof打印的格式一样
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/4833.html