[js]なぜfor…in…で配列を巡ることができませんか?
1219 ワード
原理解釈
for...in...はプロトタイプチェーンを巡回します.また、オブジェクト属性の「enumerable=true」の属性は遍歴されます.実際には行列を通して直接属性のインデックス値だけを取得したいです.
これに関連して
コードは以下の通りです
なぜlength属性がfor...in...遍歴されていないのですか?これは属性記述子にも関係があります.
for...in...はプロトタイプチェーンを巡回します.また、オブジェクト属性の「enumerable=true」の属性は遍歴されます.実際には行列を通して直接属性のインデックス値だけを取得したいです.
これに関連して
Object.prototype.hasOwnProperty
This method can be used to determine whether n object has the specified property as a direct property of that oject;unlike the in operator,this method does not check down the object's prototype chain.コードは以下の通りです
Document
// Somewhere deep in your JavaScript library...
Array.prototype.foo = 1;
var ret=Object.getOwnPropertyDescriptor(Array.prototype,"foo");
console.log(ret);// foo enumerable true, 。
// Now you have no idea what the below code will do.
var a = [1, 2, 3, 4, 5];
for (var x in a){
// Now foo is a part of EVERY array and
// will show up here as a value of 'x'.
console.log(x);
}
新発見なぜlength属性がfor...in...遍歴されていないのですか?これは属性記述子にも関係があります.
Object.getOwnPropertyDescriptor(a,"length")
Object {value: 5, writable: true, enumerable: false, configurable: false}