Javascript是否具有类似于Java的增强的for循环语法

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)

  • @Rocket的答案不会保护您免受对象本身设置的属性的影响.`a = [1,2,3]; a.listIndices = function(){for(i in a){if(a.hasOwnProperty(i)){console.log(i); }}; a.listIndices()`将列出`0; 1; 2; listIndices`. (2认同)

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引擎改进,可以看出有多少这种差异被优化,这将是非常有趣的.:-)


Cas*_*eyC 5

在ES2015(ES6)中,可以使用for-of循环。除IE之外,大多数浏览器均支持该功能。

let array = [10, 20, 30];

for (let value of array) {
  console.log(value);
}
Run Code Online (Sandbox Code Playgroud)

在此处查看Mozilla的说明