JavaScript はさまざまなタイプのループをサポートしています:
for - コードのブロックを特定の回数ループします
for/in - オブジェクトのプロパティをループします
while - 指定された条件が true の場合に、指定されたコード ブロックをループします
do/while - 指定された条件が true の場合、指定されたコード ブロックもループします
1. 演算子 : 左側のオペランドは文字列である必要があるか文字列に変換でき、右側のオペランドはオブジェクトまたは配列です。この演算子の左側の値が右側のオブジェクトのプロパティ名の場合は true を返します。
例:
var point={x:1,y:2}; //对象直接量 var has_x="x" in point; //返回true var has_z="z" in point; //返回false var ts="toString" in point;//返回true,toString为继承方法
2. for/in ステートメント: 構文、
for (オブジェクト内の変数)
ステートメント;
オブジェクトのプロパティをトラバースする方法を提供します。
例:
for(var prop in my_object) { document.write("name:"+prop+";value:"+my_object[prop],"<br>"); }
JavaScript 配列は特別な種類のオブジェクトであるため、for/in ループはオブジェクトのプロパティと同じように配列の添え字を列挙できます。
オブジェクトのすべてのプロパティ名を配列にコピーできます。
例:
var o= {x:1,y:2,z:3}; var a=new Array(); var i=0; for (a[i++] in o) ;//空语句,用于初始化数组
3. in 演算子は、for/in ステートメント とは異なります。in の左側には、変数、配列の要素、またはオブジェクトの属性は使用できません。
4. 配列に一般的に使用されるアクセス属性演算子は、「.」ではなく「[]」です。 属性文字列値に名前を付けるには、識別子「.」の代わりに「[]」を使用します。属性文字列値は動的であり、実行時に変更できます。
例:
var stock_name= get_stock_name_from_user();//从用户处获取股票名 var share= get_number_of_shares();//得到股票数量 portfolio[stock_name]= share;//动态地创建数组股票,并为每支股票赋值 将该例子与for/in循环一起使用,当用户输入了他的投资组合,可以计算当前总值 var value= 0; for (stock in portfolio) { value +=get_share_value(stock)*portfolio[stock]; }
各銘柄の株式の入出金を行います。
ポートフォリオ[株式]は、各株式の数量を入金および引き出します。
for-in ループ
機能: オブジェクトの属性をトラバースし、属性名と属性値の両方を抽出します
var obj = { "key1":"value1", "key2":"value2", "key3":"value3" }; function EnumaKey(){ for(var key in obj ){ alert(key); } } function EnumaVal(){ for(var key in obj ){ alert(obj[key]); } } EnumaKey(obj) //key1 key2 key3 EnumaVal(obj) //value1 value2 value3
この方法で配列を走査することもできますが、順序が保証されず、属性が配列のプロトタイプに追加される場合、この属性も走査されるため、お勧めできません。
for-in ループは、配列以外のオブジェクトを走査するために使用する必要があります。ループに for-in を使用することは、「列挙」とも呼ばれます。
技術的には、配列に対して for-in ループを使用できます (配列は JavaScript のオブジェクトであるため) が、これはお勧めできません。配列オブジェクトがカスタム関数で拡張されている場合、ロジック エラーが発生する可能性があるためです。また、for-inでは属性リストの順序(順序)は保証されません。したがって、配列には通常の for ループを使用し、オブジェクトには for-in ループを使用するのが最善です。