【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()
万能的方法必须记住,可以判断任何类型(数组也可以)。