我一直在查看今年欧洲会议的一些照片,并注意到我认为可能会显示即将推出的Angular 2中的一些代码。请看这里:
为什么此代码的作者使用Array.prototype.forEach.call(array, cb)
优先于较短且(在我看来)等效版本array.forEach(cb)
。我能想象的唯一原因是性能影响。
有人知道另一个区别吗?或者我对性能的猜测是对的吗?
答案 0 :(得分:8)
有许多Array-like objects看起来像数组,但不是。说出一些:
arguments
children
和childNodes
个收藏品document.getElementsByClassName
和document.querySelectorAll
许多数组原型方法都是通用的,这意味着它们的内部实现不依赖于上下文this
作为Array
构造函数的实例。这允许在其他对象的上下文中调用这些方法,其中"看起来"像数组一样。也就是说,看起来像一个数组意味着该对象具有数字键和长度属性。
以下是一个无用的示例,说明如何在类似自定义数组的对象上调用Array.prototype.join
:
Array.prototype.join.call({0: 'one', 1: 'two', length: 2}, ' ');
上面会输出字符串"one two"
。但是提供的对象显然不是数组。
答案 1 :(得分:1)
对element.attributes
或element.children
不是数组有点防御。