2

これらの属性でこの要素を作成しています:

var x = document.createElement('x');
x.setAttribute('ha','1');
x.setAttribute('he','2');
x.setAttribute('hi','3');

次に、次の 2 つの形式を使用してループし、毎回異なる出力を取得します。

>>>for(var i in x.attributes) console.log(x.attributes[i]);
ha="1"
he="2"
hi="3"
3
item()
getNamedItem()
setNamedItem()
removeNamedItem()
getNamedItemNS()
setNamedItemNS()
removeNamedItemNS()

そしてもう1つは:

>>>for(var i=0;i<x.attributes.length;i++) console.log(x.attributes[i]);
ha="1"
he="2"
hi="3"

それで、これは同じ結果を与えるべきではありませんか?なぜだめですか ?

4

2 に答える 2

5

これは、プロトタイプからすべてを取得しているためです。hasOwnProperty設定したプロパティのみを反復するために使用します。

for(var i in x.attributes){ 
    if (x.hasOwnProperty(i)) {
        console.log(x.attributes[i]);
    }
}
于 2012-11-14T10:55:14.940 に答える
5

このfor...inアプローチは、「ネイティブ」プロパティを含む、オブジェクトのすべてのプロパティを反復処理します。定義したプロパティに出力を制限するには:

for (var i in obj) {
    if (obj.hasOwnProperty(i)) {
        console.log(i);
    }
}

参考文献:

于 2012-11-14T10:55:10.333 に答える