ewo*_*wok 24 javascript iterator for-loop
我想知道JavaScript是否具有增强的for循环语法,允许您迭代数组.例如,在Java中,您可以简单地执行以下操作:
String[] array = "hello there my friend".split(" ");
for (String s : array){
System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
hello
there
my
friend
Run Code Online (Sandbox Code Playgroud)
有没有办法在JavaScript中执行此操作?或者我必须使用array.length和使用标准的循环语法如下?
var array = "hello there my friend".split(" ");
for (i=0;i<array.length;i++){
document.write(array[i]);
}
Run Code Online (Sandbox Code Playgroud)
Ama*_*dan 25
JavaScript有一个foreach-style循环(for (x in a)),但是在它上面使用它是非常糟糕的编码习惯Array.基本上,这种array.length方法是正确的.a.forEach(fn)您可以使用较新的JavaScripts中的方法,但并不保证它存在于所有浏览器中 - 并且速度比array.length方式慢.
编辑2017:"我们会看到它如何发展",的确如此.现在,在大多数引擎中,只要功能是内联的,即快速,可能不是.forEach()快速或快速.有人可能会认为两者应该是相同的,但第一种方法比第二种更容易编译器优化.for(;;)arr.forEach(function() { ... })foo = function() { ... }; arr.forEach(foo)
zie*_*mer 11
使用大多数现代浏览器可用的最新版JavaScript,您可以执行以下操作:
array.forEach(function(x){
document.write(x);
});
Run Code Online (Sandbox Code Playgroud)
详情请访问https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach.如果您担心浏览器可能不支持此操作,您可以使用他们在"兼容性"下列出的(希望缩小的)实现版本自己添加它.
这有点过时,但这是forEach我几年前从Mozilla页面派生的缩小兼容版本:
if(!Array.prototype.forEach){Array.prototype.forEach=function(b){if(typeof b!="function"){throw new TypeError()}var a=this.length,d=arguments[1],c;for(c=0;c<a;c++){if(c in this){b.call(d,this[c],c,this)}}}};
Run Code Online (Sandbox Code Playgroud)
我从来没有遇到任何问题,但Mozilla页面上的实现已经扩展了一些额外的检查和代码,使其与ECMA-262,第5版,15.4.4.18兼容.
我有一个名为common.js我使用并包含在我的所有页面中的文件,以及包含在JavaScript 1.6中引入的所有其他"Array extras",如https://developer.mozilla.org/所列.en/JavaScript/New_in_JavaScript/1.6 #Array_extras.(我一直想将此更新并发布供公众使用.)
这可能不是最快的方法(请参阅http://jsperf.com/for-vs-foreach/15了解一些具体内容 - 感谢链接,Amadan) - 但有些内容可以说明简洁性和可维护性等.此外,在未来几个月和几年内,通过进一步的JavaScript引擎改进,可以看出有多少这种差异被优化,这将是非常有趣的.:-)
在ES2015(ES6)中,可以使用for-of循环。除IE之外,大多数浏览器均支持该功能。
let array = [10, 20, 30];
for (let value of array) {
console.log(value);
}
Run Code Online (Sandbox Code Playgroud)