今天爱分享给大家带来判断 JS 数据类型有几种方法【面试题详解】,希望能够帮助到大家。
常用的有 typeof、instanceof,
不常用的有 constructor、 prototype / toString
1.typeof 是个一元运算,放在任意类型的运算数之前,返回一个 字符串 说明运算数的类型。
可检测出的类型有:
‘number’、’string’、’boolean’、’object’
‘undefined’,’function’、’symbol’
其中对象”object” 包括:Object、Array、new RegExp()、new Date() 和 Null 特殊类型
缺点:判断普通类型没有问题,但不能准确判断 引用数据类型
2.instanceof 运算符用来检测一个对象在其原型链中是否存在一个构造函数的 prototype 属性
通俗讲 instanceof 检测的是原型,检测左边的对象是否是右边类的实例
[] instanceof Array ==> true
注意:instanceof 能够判断出 [] 是 Array 的实例,也是 Object 的实例
因为 [].proto 指向 Array.prototype,而 Array.prototype.proto 又指向了 Object.prototype,最终 Object.prototype.proto 指向了 null 原型链结束。
类似的还有 new Date(),new Error() 和 new 自定义类()
归纳:所有对象都是 Object 的实例 或 Object是一切对象的父对象
3.根据对象的 constructor 判断
原理:每个构造函数都有一个 constructor 属,指回它本身
[].coconstructor === Array ==> true
判断 数字、字符串、函数 和 日期时,必须得用关键字 new 创建才行
因为只有构造函数才有 constructor 属性,还有两点需要注意:
null 和 undefined 是无效的对象,因此不会有 constructor 存在,
函数的 constructor 是不稳定的,当重写 prototype 后,
原有的 constructor 引用会丢失,constructor 会默认为 Object
4.使用 toString 判断
toString() 是 Object 的原型方法,该方法默认返回当前对象的 [[Class]] 。
这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型。
对于 Object 对象,直接调用 toString() 就能返回 [object Object] 。
而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。
Object.prototype.toString.call(undefined) === '[object Undefined]' Object.prototype.toString.call(null) === '[object Null]' Object.prototype.toString.call(123) === '[object Number]'
5.JQuery 提供的 jquery.type()
返回说明操作数的字符串
jQuery.type(123) === "number" jQuery.type(undefined) === "undefined" jQuery.type(null ) === "null " Query.type(new Date()) === "date" jQuery.type(new Error()) === "error"