1 var toString = Object.prototype.toString; 2 3 console.log(toString.call({})); // [object Object] 4 console.log(toString.call([])); // [object Array]
1.instanceof操作符
只有一个全局作用域的情况下:
let a = [] let o = {} console.log(a instanceof Array) // true console.log(o instanceof Array) // false
问题:如果页面中有多个框架,可能有两个不同版本的Array构造函数。如果要把数组从一个框架传给另一个框架,则这个数组的构造函数将有别于在第二个框架内本地创建的数组。
2.Array.isArray
let a = [] let o = {} console.log(Array.isArray(a)) // true console.log(Array.isArray(o)) // false
这个方法的目的就是确定一个值是否为数组,而不用管它是在哪个全局执行上下文中创建的
3.toString()
可以使用Object原型对象上的toString()方法判断一个对象的类型。
toString()方法被每个Object对象继承。如果在自定义对象中没有被重写,将会返回"[object type]",其中type是对象的类型
由于数组中将Object对象的toString()对象重写了,所以需要直接调用Object对象toString()方法,这里就需要用到call或者apply,然后把当前的调用方法的对象传入
1 var toString = Object.prototype.toString; 2 3 console.log(toString.call({})); // [object Object] 4 console.log(toString.call([])); // [object Array]