2016-07-26 63 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]); 

(請注意,額外的逗號,以避免類型轉換爲字符串。)