Javascriptには、Javaと同様のforループ構文が強化されていますか?



for loop javascript (6)

私は、JavaScriptにforループの構文を持たせることで、配列を繰り返し処理できるかどうか疑問に思っています。 たとえば、Javaでは、次の操作を行うだけです。

String[] array = "hello there my friend".split(" ");

for (String s : array){
    System.out.println(s);
}

出力は次のとおりです。

hello
there
my
friend

JavaScriptでこれを行う方法はありますか? または、 array.lengthを使用して、以下のようにループ構文の標準を使用するarray.lengthありますか?

var array = "hello there my friend".split(" ");

for (i=0;i<array.length;i++){
    document.write(array[i]);
}

より新しいJavaScriptエンジンの配列プロトタイプには "forEach"メソッドがあります。 同様の方法でプロトタイプ自体を拡張するライブラリもあります。


ES2015(ES6)では、 for-ofループを使用できます。 IEを除いてほとんどのブラウザでサポートされています。

let array = [10, 20, 30];

for (let value of array) {
  console.log(value);
}

Mozillaの説明はこちら


JavaScriptにはforeachスタイルのループ( for (x in a)がありますが、 Array使用することは非常に難しいコーディング方法です。 基本的に、 array.lengthアプローチは正しいです。 新しいJavaScriptの場合はa.forEach(fn)メソッドもありますが、すべてのブラウザに存在することは保証されておらず、 array.lengthよりも遅いです。

編集2017 :実際にどのようにそれが行くかわかります。 現在、ほとんどのエンジンでは、関数がインラインであるarr.forEach(function() { ... }) 、すなわち、 arr.forEach(function() { ... })が高速であれば、 .forEach()for(;;)よりも速く、 foo = function() { ... }; arr.forEach(foo) foo = function() { ... }; arr.forEach(foo)はそうでないかもしれません。 2つは同一でなければならないと考えるかもしれませんが、第1のコンパイラはコンパイラが第2のコンパイラよりも最適化する方が簡単です。


最新のブラウザで使用できるJavaScriptの最新バージョンを使用して、これを行うことができます:

array.forEach(function(x){
  document.write(x);
});

詳細はhttps://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Array/forEachにあります 。 ブラウザがこれをサポートしていない可能性がある場合は、「互換性」にリストされている実装のバージョンを使用して、自分で追加することができます。

これは少し古くなっていますが、これは数年前にMozillaのページから派生したforEach互換性のある互換バージョンです。

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)}}}};

私は決してこの問題に遭遇したことはありませんが、Mozillaのページ上の実装は、ECMA-262、第5版、15.4.4.18と互換性を持たせるために、いくつかの追加のチェックとコードで拡張されました。

common.jsと呼ばれるファイルがあります。このファイルには、JavaScript 1.6で導入された他のすべての「Array extras」と同様、 https://developer.mozilla .org / ja / JavaScript / New_in_JavaScript / 1.6#Array_extras 。 (私はこれを更新し、一般向けに公開することを意味してきました。)

これは最速のアプローチではないかもしれません(リンクについては、ある特定の点については、 http: //jsperf.com/for-vs-foreach/15参照 - Amadanのリンクに感謝します)。しかし、簡潔さと保守性などについては何か言及されています。さらに、この数ヶ月および数年にわたるさらなるJavaScriptエンジンの改良により、この格差のどれが最適化されているかを知ることは非常に面白いでしょう。 :-)


これを試して、

 var errorList = new Array();
       errorList.push("e1");
       errorList.push("e2");

       for (var indx in errorList){
               alert(errorList[indx]);
          }

x = [1,2,3];
for (i in x) {
  console.log(i);
}




iterator