如何判断一个对象是否是数组
Nov 8, 2017
1、typeof
操作符
typeof
对于数组,返回的值永远是”object”,无法具体判断到底是数组还是对象
Type | Result |
---|---|
Undefined | "undefined" |
Null | "object" (see below) |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Symbol (new in ECMAScript 2015) | "symbol" |
Host object (provided by the JS environment) | Implementation-dependent |
Function object (implements [[Call]] in ECMA-262 terms) | "function" |
Any other object | "object" |
2、instanceof
操作符
instanceof
操作符用来检测constructor.prototype
是否存在于参数object
的原型链上(换句话说,检测的是某个对象是否是某个类的实例)。
1 | function D(){}; |
使用instanceof
判断是否是数组是有风险的,因为,对象的原型链我们可以手动更改。
1 | o.__proto__ = D.prototype |
所以使用instanceof
判断一个对象是不是数组不可靠
3、原型链方法
1 | var arr = [1,23,4]; |
但是,这种方法也不可靠,因为对象的构造函数以及原型对象的构造函数都可以手动修改。
1 | var obj = {}; |
上面代码就说明,通过原型链来判断一个对象是不是数组,不可靠!
4、判断数组最准确的方法是使用Object.prototype.toString.call()
Object.prototype.toString()
方法能够打印出对象的内置类型,并且,这个内置类型在对象创建之初就设定了,而且不可修改。
1 | var arr = []; |