2016-07-26 29 views
-3

我刚刚读了一篇关于for in声明:blog.niftysnippets.org/2010/11/myths-and-realities-of-forin.html 并创建了一个小数组:与遍历数组是一个愚蠢的错误

<script> 
var stuff, index; 
stuff = ['a', 'b', 'c']; 
stuff.name = "Foo"; 
for (index in stuff) { 
x = document.getElementById("demo") 
     x.innerHTML = console.log("stuff[" + index + "] = " + stuff[index]) 
} 

</script> 

但它不工作。有人能告诉我它有什么问题吗?

+2

什么不起作用? –

+1

什么不起作用? –

+2

[适用于我](https://jsfiddle.net/900cfufk/)。它做的有点奇怪:它输出到控制台并重复设置元素的HTML为“undefined”(因为'console.log'不返回任何东西)。但正如我在该博客文章中所说的那样,除非你有充分的理由,否则不要使用“for-in”。关于SO的相关问题:[*对​​于JavaScript中的每个数组都是如此?](http://stackoverflow.com/questions/9329446/for-each-over-an-array-in-javascript) –

回答

1

您需要将结果添加到以前的结果,并改变console.log电话并添加显示器休息。

var stuff = ['a', 'b', 'c'], 
 
    index, 
 
    x = document.getElementById("demo"); 
 

 
stuff.name = "Foo"; 
 
for (index in stuff) { 
 
    x.innerHTML += "stuff[" + index + "] = " + stuff[index] + '<br>'; 
 
    //   ^^           ^^^^^^^^ 
 
}
<div id="demo"></div>

0

console.log将登录控制台

innerHTML将设置HTML内容。

这些是两种不同的操作。

如果你想设置html内容为字符串,那么我会建议你形成一个单一的字符串,然后设置innerHTML,这将减少dom操作/操作。

var stuff, index; 
 
stuff = ['a', 'b', 'c']; 
 
stuff.name = "Foo"; 
 
var str = ""; 
 

 
for (index in stuff) { 
 
    console.log("stuff[" + index + "] = " + stuff[index]) 
 
    str += "stuff[" + index + "] = " + stuff[index] + "<br/>"; 
 
} 
 
x = document.getElementById("demo"); 
 
x.innerHTML = str;
<div id="demo"></div>

+0

我们可以删除这个:console.log(“stuff [”+ index +“] =”+ stuff [index]) ? –

+0

是的,如果你不想在控制台中记录任何东西,你可以删除它。 –

0

首先,你不能定义的innerHTML是的console.log功能可按。 函数不返回你放入的字符串。所以它将是未定义的。 其次,你重写每个循环的innerHTML。如果你想堆叠,你需要连接字符串。 如果相同,你不需要每个循环都调用document.getElementById。

<script> 
var stuff, index; 
stuff = ['a', 'b', 'c']; 
stuff.name = "Foo"; 
var x = document.getElementById("demo"); 
for (index in stuff) { 
    var string = "stuff[" + index + "] = " + stuff[index]; 
    console.log(string); 
    x.innerHTML +=string ;  
} 

</script> 
0

我的猜测是,你运行你的代码中的DOM加载之前(和更具体的id="demo"元素),所以如果你打开JavaScript控制台(在许多浏览器F12),你会看到一个关于x.innerHTML喜欢抱怨:

TypeError: x is null

即使我错了,这段代码表明,你是不是真的知道控制台,并希望看到页面本身,事情不会发生的输出:

x.innerHTML = console.log("stuff[" + index + "] = " + stuff[index]); 

这是你应该做的:

console.log("stuff[" + index + "] = ", stuff[index]); 

(请注意,额外的逗号,以避免类型转换为字符串。)