ECMAScript 5array.forEach(callback[, thisArg])
对数组的迭代非常方便,并且与使用 for 的语法相比具有许多优势:
- 它更简洁。
- 它不会创建我们仅用于迭代目的的变量。
- 它为循环的局部变量创建了一个可见范围。
- 它提高了性能。
没有object.forEach
更换的原因是什么for(var key in object)
?
当然,我们可以使用 JavaScript 实现,例如 _.each 或 $.each,但它们是性能杀手。
ECMAScript 5array.forEach(callback[, thisArg])
对数组的迭代非常方便,并且与使用 for 的语法相比具有许多优势:
没有object.forEach
更换的原因是什么for(var key in object)
?
当然,我们可以使用 JavaScript 实现,例如 _.each 或 $.each,但它们是性能杀手。
好吧,自己装起来很容易。为什么要进一步污染原型?
Object.keys(obj).forEach(function(key) {
var value = obj[key];
});
我认为一个重要的原因是想要避免将内置属性添加到Object
. Object
s 是 Javascript 中所有内容的构建块,但也是该语言中的通用键/值存储。添加新属性Object
会与您的 Javascript 程序可能想要使用的属性名称冲突。因此,在添加内置名称时要Object
格外小心。
数组是由整数索引的,所以它没有这个问题。
这也是我们有Object.keys(obj)
而不是简单的原因obj.keys
。污染Object
构造函数,因为它通常没什么大不了的,但不要管实例。
.forEach
确实创建变量只是为了迭代......只是不是你自己创建的。
如果您使用 shim,那么它们是闭包中的 JS 变量,否则它们可能是 C++ 或任何浏览器的本机实现。
ES6for ... of
将遍历您传递的任何内容。
let
ES6 还使用, 而不是获取块级变量(而不是函数范围)var
您将能够在 ES6 中将迭代器添加到特定类型的对象(即:您构建以支持迭代器的对象)。
但这里的问题是 ES5 旨在保留 ES3 的大部分语法(很少有新关键字,并且在常规使用中没有新关键字)。
大多数附加功能必须是方法调用(通常是原型)。
考虑到自 ES3 推出以来 JS 的使用量越来越大,数组需要做大量工作。
对象不需要.map()
/.reduce()
能力,除非您正在构建非常特定的对象,在这种情况下,您正在自己实现这些对象。
您必须记住,javascript 中的每个对象都继承自Object
. 并非 javascript 中的每个对象都需要对其属性进行迭代。这些主要限于数据模型对象。添加 forEach 方法只会不必要地增加每个对象的原型。
如果您当前看到 Object 及其方法,它们的存在只是为了识别对象,或将一个对象与另一个对象区分开来。