检测数组
1.对于一个网页,或者一个全局作用域而言,instanceof操作符。
2.ES5中的Array.isArray()函数。确定某值是不是数组,而不管他是在哪个全局执行环境中创建的。
3.Object.prototype.toString.call()方法
适用于所有环境,只支持原生的对象,Object的toString()方法不能检测非原生构造函数的构造函数名。开发人员自定义的任何构造函数都将返回[object Object].
原理:在任何值上直接调用Object的原生toString()方法,都会返回[object NativeConstrctorName]格式的字符串,每个类内部都有一个class属性,这个属性中就指定了上述字符串中构造函数名。
var value = [];
console.log(Object.prototype.toString.call(value)) //"[object Array]"
4.constructor 当一个函数被定义时,JS引擎会为F添加prototype原型,然后在prototype上添加一个constructor属性,并让其指向F的引用。
function f(){}
f.constructor; //ƒ Function() { [native code] }
var a = [];
a.constructor; //ƒ Array() { [native code] }