如何理解《JavaScript高程》第六章中Array.from中提到的instanceof的问题

原文内容如下:


6.2.4 检测数组
一个经典的ECMAScript问题是判断一个对象是不是数组。在只有一个网页(因而只有一个全局作用域)的情况下,使用instanceof操作符就足矣:

if (value instanceof Array){
  // 操作数组
}

使用instanceof的问题是假定只有一个全局执行上下文。如果网页里有多个框架,则可能涉及两个不同的全局执行上下文,因此就会有两个不同版本的Array构造函数。如果要把数组从一个框架传给另一个框架,则这个数组的构造函数将有别于在第二个框架内本地创建的数组。

为解决这个问题,ECMAScript提供了Array.isArray()方法。这个方法的目的就是确定一个值是否为数组,而不用管它是在哪个全局执行上下文中创建的。来看下面的例子:

if (Array.isArray(value)){
  // 操作数组
}

在上面内容的加粗斜体部分内容中,提到了多个框架的情况,具体指的是什么情况下,会出现不同版本的Array构造函数?

阅读 2.4k
2 个回答

多个 iframe。然后每个里面都有 Array 这个对象。他们并不相等。

本质来讲 instanceof 是去找 prototype 之类的,看看是否有继承。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏