参考:https://www.cnblogs.com/Walker-lyl/p/5597547.html
因为无论是数组还是对象,对于typeof的操作返回值都为object,所以就有了区分数组类型和对象类型的需要:
方法一:通过length属性
一般情况下对象没有length属性值,其值为undefiend,而数组的length值为number类型缺点:
非常不实用,当对象的属性存在length,且其值为number(比如类数组),则该方法失效,不建议使用,看看即可。
方法二:通过instanceof来判断区分
instanceof 判断是否继承自某个对象
var a = {
name:'xiaoyaoji'
};
var b = ['xiaoyaoji'];
a instanceof Array // false
b instanceof Array // true
方法三:通过constructor
constructor返回一个对象的构造器
var arr = [1, 2, 3];
var obj = {
name: 'lyl',
age: 18,
1: 'name'
}
console.log(arr.constructor === Array); // true
console.log(obj.constructor === Array); // false
方法四:通过toString()方法
数组原型和对象原型定义的toString()方法不同
var a = {
name:'xiaoyaoji'
};
var b = ['xiaoyaoji'];
console.log(a); // [object Object]
console.log(b); // [object Array]
方法五:通过Array独有方法判断
var a = {
name:'xiaoyaoji'
};
var b = ['xiaoyaoji'];
console.log(a.sort === Array.prototype.sort); // false
console.log(b.sort === Array.prototype.sort); // true