一般情况下都会想到使用typeof()来判断数组和对象,但是使用typeof来判断其返回值都是 object
图1.png
方法一:通过typeof() 配合 isNaN()判断
1、数组对象的长度为>=0的数字,而object对象的长度为undefined
2、isNaN():如果参数值为 NaN 或字符串、对象、undefined等非数字值则返回 true, 否则返回 false。
typeof([]) $$ !isNaN([].length)
// true
typeof({}) $$ !isNaN({}.length)
// false
方法二:通过Object.prototype.toString.call()判断
使用Object.prototype.toString.call()将该变量转化为代表其类型的string
Object.prototype.toString.call([]);
// "[object Array]"
Object.prototype.toString.call({});
// "[object Object]"
方法三:通过isArray()判断
isArray(),用于确定传递的值是否是一个 Array,如果值是则为true; 否则为false.
Array.isArray([])
// true
Array.isArray({})
// false
方法四:通过constructor来判断
官方解释是constructor 属性返回对创建此对象的数组函数的引用。官方的解释一般都不是人能看懂的,其实 constructor 原本就是用来进行对象类型判断的,但是还有一个作用就是官方的解释 的意思: 每一个对象实例都可以通过 constrcutor 对象访问它的构造函数
var a = {};
console.log(a.constructor);
var b = [];
console.log(b.constructor);
图2.png
网友评论