通常、JavaScript では、配列を走査するために for と for in を使用した結果に違いはありません。そのループ変数 i は 0 から始まる配列インデックスです (for in が非配列オブジェクトの属性コレクションを走査する場合、これは次のようになります)。 i は属性名、またはキーと呼ばれます)。もう 1 つ注意すべき点は、配列をトラバースするには for in を使用します。ループ変数 i は文字列型です。配列をプロトタイプ化し、for in を使用して配列を走査する場合は、いくつかの問題に注意する必要があります。
テストコード:
Array.prototype .max = function()
{
return Math.max.apply({}, this)
var company = ['Adobe','Apple','Google', 'Intel' ,'Microsoft','Oracle','IBM','SUN'];
alert(company.length); //ここで出力される長さは、上記で定義された配列の長さと一致します。 🎜>//以下 IE6 と IE7 の最初のループでは、i の値は 0 ではなく、上記のプロトタイプ拡張のメソッド名 max になります。ただし、IE8 と FF ブラウザーの最後のループでは、 、i の値は max
for (var i in company)
{
alert('index is:' i 'nvalue is:' company[i]);
}
/ /このとき、上記の 8 企業リストだけを出力したい場合は、for in ループを使用することはできません。以下:
for (var i in company)
{
if (!isNaN(i))
alert('index is:' i 'nvalue is:' company[i]); 🎜>}
//もちろん、安全上の理由から、それほど怠惰にしないでください。次のような通常の for ループを記述するのが最も科学的です。
for (var i=0; i< company.length; i )
{
alert('index is:' i 'nvalue is:' company[i]);
}
//この種のループ問題は、通常、配列プロトタイプ属性を使用すると期待した結果が得られませんが、注意しないとコード内で問題が発生する可能性もあります。次の例を参照してください。
var userInfo = [["Tom",21,"020-12345678"],["Mike",23,"020-87654321"]] // 明らかに、これは (userInfo の var i) の
をネストした配列です。 >{
//このとき、このループのように、userInfo[i][0] を通じて期待した値がまったく得られない可能性があり、値が未定義の結果が表示されるためです。 i の値が最大の場合、userInfo[i] は次のような部分配列ではなく関数になります ["Tom",21,"020-12345678"]
alert('Name:' userInfo[i][0] ' nAge:' userInfo[i][1] 'nPhone:' userInfo[i][2]);
}
一般に、for in はオブジェクトのプロパティを走査するために使用されますが、配列for を使用してトラバースする必要があります (もちろん配列もオブジェクトです)。 for の走査効率が for in よりも高いことがわかります。また、C#、ActionScript3.0、foreach ループが最も効率的なループになりますが、JavaScript にはそのようなループがありません。最も科学的な配列走査は次のようになります。通常の for ループを使用し、配列の長さを事前に保存します。コードは次のとおりです:
コードをコピー
コードは次のとおりです: var company = ['Adobe'、' Apple'、'Google'、'Intel'、'Microsoft'、'Oracle'、'IBM'、'SUN']; for (var i = 0, companyNum = company.length; i < companyNum; i )
alert('index is:' i 'nvalue is:' company[i]);
著者: WebFlash 🎜>出典: http://webflash.cnblogs.com