如何判断一个对象是否是数组
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 = []; |