2

我正在使用以下属性创建此元素:

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

然后我使用这两种形式循环遍历它,每次得到不同的输出:

>>>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()

还有一个:

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

那么,这不应该给出相同的结果吗?为什么不 ?

4

2 回答 2

5

for...in方法遍历对象的所有属性,包括“本机”属性。要将输出限制为您定义的那些属性:

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

参考:

于 2012-11-14T10:55:10.333 回答
5

这是因为您也从原型中获得了一切。用于hasOwnProperty仅迭代您设置的那些属性:

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