原文内容如下:
6.2.4 检测数组
一个经典的ECMAScript问题是判断一个对象是不是数组。在只有一个网页(因而只有一个全局作用域)的情况下,使用instanceof操作符就足矣:
if (value instanceof Array){
// 操作数组
}
使用instanceof的问题是假定只有一个全局执行上下文。如果网页里有多个框架,则可能涉及两个不同的全局执行上下文,因此就会有两个不同版本的Array构造函数。如果要把数组从一个框架传给另一个框架,则这个数组的构造函数将有别于在第二个框架内本地创建的数组。
为解决这个问题,ECMAScript提供了Array.isArray()方法。这个方法的目的就是确定一个值是否为数组,而不用管它是在哪个全局执行上下文中创建的。来看下面的例子:
if (Array.isArray(value)){
// 操作数组
}
在上面内容的加粗斜体部分内容中,提到了多个框架的情况,具体指的是什么情况下,会出现不同版本的Array构造函数?
多个 iframe。然后每个里面都有 Array 这个对象。他们并不相等。
本质来讲
instanceof
是去找 prototype 之类的,看看是否有继承。