为什么这些循环不同?

Yem*_*mto 4 javascript

我在工作的网站上工作,当我遇到一些奇怪的东西时,我通过ajax从数据库中获取数据,然后我使用一些循环来更新表中的数据.这是我第一次尝试循环

for(var id in data){
    for(var key in data[id])
        for(var e in document.getElementsByName(key+id))
            e.innerHTML = data[id][key] !== null ? data[id][key] : "";
Run Code Online (Sandbox Code Playgroud)

我希望这可以毫无问题地工作,但事实并非如此.表中的所有字段都没有更新,我不知道为什么.然后我决定用更传统的东西进行测试,最后得到了这个.

for(var id in data){
    for(var key in data[id]){
        var temp = document.getElementsByName(key+id);
        for(var i=0; i<temp.length; i++)
            temp[i].innerHTML = data[id][key] !== null ? data[id][key] : "";
    }
Run Code Online (Sandbox Code Playgroud)

这是完美的,但我不明白为什么,因为从我所看到的,循环应该做同样的事情.所以我想知道,为什么它们不同,我该如何解决它.我喜欢我的代码中的一致性,并且不想使用for(var i=0; i<temp.length; i++)因为我之前使用过其他类型的循环.

Tho*_*sen 8

document.getElementsByName(key+id)返回一个数组.语法for(var x in y)迭代对象/数组中的名称.对象中的名称是键,数组中的名称是索引.

因此,e在你最后一个循环中,将是0,1,2,3,长度,....