【JavaScript基础】判断数据类型,判断是数组还是对象?


一、判断数据的类型,了解一些常用的方法(结尾为总结判断数组和对象的推荐方法)

1.typeof运算符

只能处理基础数据,typeof属于运算符不是函数,所以可以不用加括号 typeof()

NaN返回"number",null返回"object"

很明显Array和Object 会返回 "object",所以你无法使用typeof判断数组还是对象。

typeof 的返回值以下截图自MDN官网

 2.instanceof运算符

用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上, 

当你希望判断是否为对象时,instanceof 是无法判断的。如果你希望判断是否为数组时,instanceof

3.Object.prototype.constructor

返回创建实例对象的 Object 构造函数的引用,可以进行判断对象或者数组

4.Object.prototype.toString.call()

万能,可以判断任何类型。Object.prototype.toString.call() 常用于判断浏览器内置对象。

5.Array.isArray(),有兼容问题,当然现在已经不是基本不存在了(IE 22年6月15日停止更新)

从字面定义来看,只有传入参数为数组时会返回true,其余所有情况返回为false

 二、判断数组 或者  对象的 推荐方法

  • 判断数组的方法:Array.isArray()

其余方法均有限制(instanceof受限于同一框架(同一执行环境),constructor存在手动修改的可能性),考虑兼容性用万能方法Object.prototype.toString.call()代替

  • 判断对象的方法:Object.prototype.toString.call()

万能的方法必须记住,可以判断任何类型(数组也可以)。