Javascript for()循环变体

fra*_*ies 2 javascript for-loop

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

var x = document.createElement('x');
x.setAttribute('ha','1');
x.setAttribute('he','2');
x.setAttribute('hi','3');
Run Code Online (Sandbox Code Playgroud)

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

>>>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()
Run Code Online (Sandbox Code Playgroud)

而另一个:

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

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

Dav*_*mas 5

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

for (var i in obj) {
    if (obj.hasOwnProperty(i)) {
        console.log(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

参考文献:


Asa*_*din 5

这是因为你从原型中获得了所有东西.使用hasOwnProperty仅遍历已设置的属性:

for(var i in x.attributes){ 
    if (x.hasOwnProperty(i)) {
        console.log(x.attributes[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)