使用的forEach和相关
如果您使用的环境支持ES5的阵列功能(直接或使用垫片),则可以使用新的forEach(spec | MDN):
var a = ["a", "b", "c"];
a.forEach(function(entry) {
console.log(entry);
});
的forEach接受一个迭代函数和任选一个值,以调用该函数的迭代器(以上未使用)时,因为这使用。按顺序为数组中的每个条目调用迭代器函数,跳过稀疏数组中不存在的条目。尽管我只使用了上面的一个参数,但迭代器函数被三个参数调用:每个条目的值,该条目的索引以及对正在迭代的数组的引用(如果函数尚未拥有它便利)。
在通用网页上仍然使用forEach(截至2014年3月)要求您为本身不支持它的浏览器添加“填充”,因为IE8和更早版本没有它(全球浏览器用户的使用率在7%到21%之间,具体取决于你相信谁;这一数字在中国与其他地区的使用明显较高有关,总是检查你自己的统计数据,看看你需要什么支持)。但填补/填充它很容易完成(搜索“es5垫片”的几个选项)。
forEach具有这样的好处,您不必在包含范围中声明索引和值变量,因为它们作为迭代函数的参数提供,因此恰好适用于该迭代。
如果您担心为每个数组条目进行函数调用的运行时成本,请不要;细节。
此外,的forEach就是“遍历所有这些”功能,但ES5定义了几个其他有用的“你的工作方式,通过阵列和做事”的功能,包括:
每一个(停止循环的第一次迭代器返回false或falsey) 一些(停止循环第一次迭代器返回true或truthy) filter(创建一个新的数组,其中包括过滤器函数返回true的元素并省略返回false的元素) map通过迭代器函数返回的值创建一个新数组) reduce(通过重复调用迭代器构建值,传递前一个值ES;详情请参阅规格;一个数组的内容和许多其他的东西) reduceRight总结有用(如降低,但在降,而不是升序)
使用一个简单的for循环工作
有时旧的方式是最好的:
var index;
var a = ["a", "b", "c"];
for (index = 0; index < a.length; ++index) {
console.log(a[index]);
}
如果数组的长度将不会在循环过程中改变,它在性能敏感的代码(不可能),一个稍微复杂一点的版本抓住了长度达阵可能是一点点更快:
var index, len;
var a = ["a", "b", "c"];
for (index = 0, len = a.length; index < len; ++index) {
console.log(a[index]);
}
和/或计数落后:
var index;
var a = ["a", "b", "c"];
for (index = a.length - 1; index >= 0; --index) {
console.log(a[index]);
}
但随着现代JavaScript引擎,这是罕见的,你需要勉强维持该果汁的最后一位。
.forEach不能被有效地打破。你必须抛出一个异常 进行突破
所以本地环比。每循环更好