四种方法
let a=[] //数组
let b={} //对象
1、用isArray,缺点: ie8不支持
console.log(Array.isArray(a)) //true
console.log(Array.isArray(b)) //false
2、用instanceof,缺点: 不常用的原因是用iframe会有问题
console.log(a instanceof Array) //true
console.log(b instanceof Array) //false
网上找的不错的一个文章参考:https://www.cnblogs.com/laiqun/p/5645801.html
3、用constructor,缺点: 与第二个一样
console.log( a.constructor===Array) //true
console.log( b.constructor===Array) //false
4、原型链 推荐使用
console.log( Object.prototype.toString.call(a)==='[object Array]') //true
console.log( Object.prototype.toString.call(b)==='[object Object]') //true
为什么toString要去原型链找,因为如果直接用对象b的toString方法,如果这个toString方法被改写过,就会有问题,比如
let b={
toString:function(){
return 'test'
}
} //对象
console.log( b.toString()==='[object Object]') //false
//如果用了b.toString(),控制台返回的false,但是b是对象,正确应该让返回true
//所以必须用原型链上的toString