ホームページ >ウェブフロントエンド >jsチュートリアル >for inループとjsのforループの違いは何ですか

for inループとjsのforループの違いは何ですか

一个新手
一个新手オリジナル
2017-09-09 13:04:161988ブラウズ

JavaScript for...in ステートメント

for...in ステートメントは、配列またはオブジェクトのプロパティをループするために使用されます。

for ...in ループ内のコードが実行されるたびに、配列の要素またはオブジェクトのプロパティが操作されます。

ヒント: for-in ループは、配列以外のオブジェクトを走査するために使用する必要があります。ループに for-in を使用することは、「列挙」とも呼ばれます。 ·

構文:

for (变量 in 对象)
{    在此执行代码}

「変数」は変数を指定するために使用されます。指定される変数は、配列要素またはオブジェクトの属性です。

例: for ... in を使用して配列をループします。

<html><body><script type="text/javascript">var x
var mycars = new Array()
mycars[0] = "Saab"
mycars[1] = "Volvo"
mycars[2] = "BMW"
for (x in mycars)
{
document.write(mycars[x] + "<br />")
}</script></body></html>

注 1: for in ループは、属性の添字に従って出力を配置しません。

//code from http://caibaojian.com/js-loop-for-in.html"first":"first",   "zoo":"zoo",  "2":"2",  "34":"34",  "1":"1",  "second":"second"};for (var i in obj) { console.log(i); };输出:1234firstzoosecond

実行時はchromeに従って実行し、まず負でない整数のキーを抽出して出力をソートし、残りを定義順に出力します。この奇妙な設定のせいで、avalon の ms-with オブジェクトソートは期待どおりに出力されません。キー名を純粋な数値で定義しないようにユーザーに強制できるのはのみです。

例 1: 配列のプロトタイプ オブジェクトに新しい属性が定義され、for ループを使用しても問題ありませんでした

function getNewArray(){var array=[1,2,3,4,5];Array.prototype.age=13;
var result = [];for(var i=0;i<array.length;i++){
result.push(array[i]);
}alert(result.join(''));
}

例 2: for in ループが使用されましたが、依然として正しい結果 12345 が得られました。私たちは期待していました

function getArrayTwo(){var array=[1,2,3,4,5 ];
var result=[];
for(var i in array){
result.push(array[i]);
}alert(result.join(''));
}

例 3: プロトタイプに属性を追加すると、デフォルトで列挙され、最終的に 1234513 が出力されます

function getNewArrayTwo(){var array=[1,2,3,4,5 ];
Array.prototype.age=13;var result=[];
for(var i in array){
result.push(array[i]);
}alert(result.join(''));
}

そのため、実際、『ハイパフォーマンス』の本では、配列に対して for in ループを実行しないことが推奨されています。 JavaScript の for in も強調されます。ループは常にオブジェクトのプロトタイプにアクセスして、プロトタイプにプロパティがあるかどうかを確認するため、トラバースに誤って余分な圧力がかかるため、ループは良くありません。

回避策:

オブジェクトに指定された名前のプロパティがある場合、Object.prototype.hasOwnProperty(name) は true を返します。オブジェクトがプロトタイプ チェーンからこのプロパティを継承する場合、またはそのようなプロパティをまったく持たない場合は、false が返されます。プロトタイプのプロパティを考慮せずに、hasOwnProperty を介して現在をトラバースするように for in ループを制限します。

function finalArray(){var array=[1,2,3,4,5 ];
Array.prototype.age=13;
var result=[];for(var i in array){if(array.hasOwnProperty(i)){
result.push(array[i]);
}
}alert(result.join(''));
}

注:

1. 初期の Safari ブラウザなどの一部のブラウザは、このメソッドをサポートしていません

2. オブジェクトはハッシュ値として使用されることが多いため、hasOwnProperty は他の属性によってブロックされます (ただし、この属性を使用するのがそれほど退屈な人はいないと思います)

以上がfor inループとjsのforループの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。