为什么ECMAScript 5中Object上没有forEach方法
Why is there no forEach method on Object in ECMAScript 5?
ECMAScript 5的array.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
是Javascript中所有内容的构建块,但也是该语言中的通用键/值存储。向Object
添加新属性将与Javascript程序可能要使用的属性名称冲突。因此,在Object
中添加内置名称时要格外小心。
数组是由整数索引的,所以它没有这个问题。
这也是为什么我们有Object.keys(obj)
而不是简单的obj.keys
。污染Object
构造函数,因为这通常不是什么大不了的事情,但不要使用实例。
-
.forEach
创建变量只是为了迭代。。。只是不是你自己创造的
如果你使用的是填充程序,那么它们是闭包中的JS变量,否则它们可能是C++中的,或者浏览器的本地实现是什么 -
ES6正在获取
for ... of
,它将遍历您传递的任何内容。 -
ES6还使用
let
而不是var
获取块级变量(而不是函数范围的) -
您将能够在ES6中为特定类型的对象添加迭代器(即:为支持迭代器而构建的对象)。
但这里的问题是,ES5旨在保留ES3的大部分语法(很少有新的关键字,并且在常规使用中没有新的关键字)
大多数附加功能必须是方法调用(通常是原型化的)
考虑到自ES3推出以来JS的使用量越来越大,数组需要做大量的工作。
对象不需要.map()
/.reduce()
功能,除非您正在构建非常具体的对象,在这种情况下,您将自己实现这些对象。
您必须记住,javascript中的每个对象都继承自Object
。不是javascript中的每个对象都需要迭代其属性。这些主要局限于数据模型对象。添加forEach方法只会不必要地增加每个对象的原型。
如果您当前看到对象及其方法,则它们的出现只是为了识别对象,或将一个对象与另一个对象区分开来。
- 在JavaScript中中断forEach方法的首选方法
- 将id/类放在HTML中的正确方法是使用foreach来获得确切的值
- 不能调用未定义节点.js的方法“forEach”
- 每次迭代在 Foreach 循环中重复 PHP 睡眠方法
- 如何删除“对象在节点中没有方法'forEach'错误.js”
- 使用 forEach 方法修改 dom 元素
- JavaScript 方法 array.forEach 在 Chrome 中工作吗?
- MongoDB aggregate() - 错误“TypeError: 无法调用未定义的方法'forEach
- 不理解此forEach()方法的输出
- 使用敲除foreach绑定绑定方法名称
- 回调函数的定义以及它如何适用于array.prototype.forEach/map/filter方法
- Jquery.ech()和Array.prototype.forEach()方法的区别
- 如何在knockout.js中的foreach中使用computed方法
- 使用Array.prototype.forEach()方法
- 在Foreach循环中调用Async方法
- JavaScript: Internet Explorer不支持forEach方法
- AngularJS: forEach http get data -等待其他方法,直到所有来自循环的数据被加载
- 为什么字符串变量可以通过JS中的调用使用forEach方法
- 使用forEach方法在javascript
- 为什么ECMAScript 5中Object上没有forEach方法