判断 JS 数据类型有几种方法【面试题详解】

今天爱分享给大家带来判断 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"

人已赞赏
前端

JS 中的数据类型有哪些【面试题详解】

2020-12-29 17:30:56

前端

JS中null 和 undefined 有啥区别【面试题详解】

2020-12-29 17:32:37