gpt4 book ai didi

javascript - Array.prototype.map.call 与 Array.map

转载 作者:行者123 更新时间:2023-11-30 11:33:01 25 4
gpt4 key购买 nike

我正在阅读有关 querySelector 方法的内容,文章建议例如应使用 Array.prototype.map.call() 而不是 map( )。我对此没有问题,但是我真的不明白为什么应该选择 Array.prototype.map.call() 而不是 Array.map() 是什么让一个比另一个更好?

let nodes = document.querySelectorAll('div.menu-item')

Array.prototype.map.call(nodes, one => one.innerHTML)
//vs
Array.map(nodes, one => one.innerHTML)

最佳答案

首先,没有Array.map 。前一个变体的用例如下:您将无法调用 map例如通过document.querySelectorAll('div')[0].map 。事实上,document.querySelectorAll返回 NodeList而不是数组并且缺少 map 方法。

What makes one better than the other?

问题实际上不在于哪种变体更好。这是关于无法调用map的问题在节点列表上。

当作为 thisArg 传递时,数组原型(prototype)中的大多数函数也能够处理类似数组的对象(即,其键是数字索引表示的对象)。至 call (or apply). Hence, Array.prototype.map.call(array-like, mapFunction)`可以像数组一样映射NodeList。

但是有两种选择:

  1. 使用Array.from :Array.from(nodes, n => n.innerHTML) ES6 中引入,但 Internet Explorer 不支持。然而,当这并不重要时,我更喜欢这个。
  2. 使用Array.prototype.slice.call(nodes).map(n => n.innerHTML) ,其工作方式类似(请参阅 how does Array.prototype.slice.call() work? )或坚持使用 Array.prototype.map.call .

但是,根据您的整体代码,(1)的使用似乎非常好,我个人更喜欢这样做。

关于javascript - Array.prototype.map.call 与 Array.map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45564648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com