[js]なぜfor…in…で配列を巡ることができませんか?

1219 ワード

原理解釈
for...in...はプロトタイプチェーンを巡回します.また、オブジェクト属性の「enumerable=true」の属性は遍歴されます.実際には行列を通して直接属性のインデックス値だけを取得したいです.
これに関連してObject.prototype.hasOwnPropertyThis 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}