javascriptのfor in文の詳細
1846 ワード
コードは以下の通りです
注意:オブジェクトの一部の属性は同じように読み取り専用としてマークされています.永久(削除不可)または列挙できないものもあります.これらの属性はfor/inサイクルを使って列挙できません.すべてのユーザーが定義した属性は列挙することができるが、多くの内部属性は、すべての内部方法を含むものである.また、オブジェクトは、他のオブジェクトの属性を継承することができます.継承されたユーザが定義した属性は、for/inサイクルを使って列挙することができます.
for(var i=0;i<len;i++)のような使い方は、一般的にfor inで代えることができます.
たとえば:
一つのオブジェクトがfor in貧困を行うことができますか?私たちはpropertyIs Enumerable属性で判断できます.次のように説明します.
object.propertyIs Eumerable属性propnameの文字列をfor/inループで見ることができますか?object属性の名前を含む場合、objectはpropnameという非継承属性を持っています.また、この属性は列挙可能です.
説明:
for/in文でオブジェクトの「列挙可能」属性を遍歴することができますが、オブジェクトの属性はすべて列挙可能ではありません.JavaScriptコードによってオブジェクトに追加された属性は列挙可能で、内部オブジェクトの定義済み属性(例えば、方法)は通常は一枚では挙げられません.
propertyIs Enumerable()方法はプロトタイプチェーンを検出しません.これは、オブジェクトの局所的な属性にのみ適用されることを意味します.継承属性のエニュメレーションを検出することができません.
var o=new Object();o.x=3.14o.propertyIs Enumerable("x")//true o.propertyIs Eumerable("y")/.false have not the propertyo.propertyIs Enumerable("toString")///false inhersited Object.prototype.propertyIs Enumerable(「tostring」)//false nonenumerable
for(variable in object)
statement
variableは変数を宣言するvar文であり、配列の1つの要素または対象の1つの属性は循環体の内部にあり、オブジェクトの1つの属性名は文字列として変数variableに与えられます.注意:オブジェクトの一部の属性は同じように読み取り専用としてマークされています.永久(削除不可)または列挙できないものもあります.これらの属性はfor/inサイクルを使って列挙できません.すべてのユーザーが定義した属性は列挙することができるが、多くの内部属性は、すべての内部方法を含むものである.また、オブジェクトは、他のオブジェクトの属性を継承することができます.継承されたユーザが定義した属性は、for/inサイクルを使って列挙することができます.
for(var i=0;i<len;i++)のような使い方は、一般的にfor inで代えることができます.
たとえば:
var a = ["a","b","c"];
for(var el in a){
alert(a[el]);
}
これはつまり貧乏がaの中のすべての元素を挙げて、もちろん上のこの例は使うことができるのです.
for(var i=0,len=a.length;i<len;i++){
alert(a[i]);
}
このような方式は循環的に並べられていますが、この方式は必ずしも効果が現れない場合があります.たとえば:
var a = {"first":1,"second":2,"third":3};
この時はfor inで貧しいです.一つのオブジェクトがfor in貧困を行うことができますか?私たちはpropertyIs Enumerable属性で判断できます.次のように説明します.
object.propertyIs Eumerable属性propnameの文字列をfor/inループで見ることができますか?object属性の名前を含む場合、objectはpropnameという非継承属性を持っています.また、この属性は列挙可能です.
説明:
for/in文でオブジェクトの「列挙可能」属性を遍歴することができますが、オブジェクトの属性はすべて列挙可能ではありません.JavaScriptコードによってオブジェクトに追加された属性は列挙可能で、内部オブジェクトの定義済み属性(例えば、方法)は通常は一枚では挙げられません.
propertyIs Enumerable()方法はプロトタイプチェーンを検出しません.これは、オブジェクトの局所的な属性にのみ適用されることを意味します.継承属性のエニュメレーションを検出することができません.
var o=new Object();o.x=3.14o.propertyIs Enumerable("x")//true o.propertyIs Eumerable("y")/.false have not the propertyo.propertyIs Enumerable("toString")///false inhersited Object.prototype.propertyIs Enumerable(「tostring」)//false nonenumerable