栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么节点列表没有forEach?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么节点列表没有forEach?

现在,NodeList在所有主要浏览器中都具有forEach()

原始答案

这些答案都不能解释 为什么 NodeList不继承自Array,从而允许它拥有

forEach
其余所有内容。

答案在此es-discuss线程上找到。简而言之,它破坏了网络:

问题是代码错误地将instanceof假定为实例是与Array.prototype.concat结合使用的Array。

Google的Closure库中存在一个错误,由于该错误,几乎所有Google的应用程序都失败了。发现该库后立即对其进行了更新,但在那里可能仍然存在与concat结合使用时做出相同错误假设的代码。

也就是说,某些代码做了类似的事情

if (x instanceof Array) {  otherArray.concat(x);} else {  doSomethingElseWith(x);}

但是,

concat
将“实际”数组(不是Instanceof数组)与其他对象区别对待:

[1, 2, 3].concat([4, 5, 6]) // [1, 2, 3, 4, 5, 6][1, 2, 3].concat(4) // [1, 2, 3, 4]

因此,这意味着上面的代码在

x
是NodeList的时候就中断了,因为在它沿着
doSomethingElseWith(x)
路径行进之前,而之后沿着
otherArray.concat(x)
路径行进,由于
x
不是真正的数组,所以这样做很奇怪。

一段时间以来,有人提出了一个

Elements
类的建议,该类是Array的真正子类,将被用作“新的NodeList”。但是,至少从现在起,它已从DOM标准中删除,因为由于各种技术和规范相关的原因,尚不可行。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/575279.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号