2016-12-25 177 views
-4

許多編程語言使用'for x in'的語法來遍歷列表/數組。爲什麼'for x in <array>'不能按預期工作?

它也存在於JavaScript中。然而,下面的代碼:

var arr = [5, 6, 9, 10]; 
for (var i in arr) { 
    console.log(i); 
} 

輸出陣列的索引「ARR」,而不是該數組本身的元件(不像其它的編程語言)。

我的問題是爲什麼?或者這種行爲的JavaScript邏輯是什麼?

+5

這只是ECMAScript規定的行爲;所以它適用於比JavaScript更多的語言,它當然不限於nodejs。如果你想枚舉值而不是屬性名稱,你正在尋找['for ... of'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ Statements/for ... of)而不是['for ... in'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) 。這個問題是許多其他人的重複。 – canon

+0

我會做一些事情:遍歷一個對象會給它的鍵,你可以使用它們來獲取值。如果它給出的值,你不能得到鑰匙。爲了一致性,陣列以相同的方式工作。 –

+0

不,@Chris G,它不會像那樣工作--' for ... in'僅用於對象,OP中的'arr'是一個'Object'。示例代碼中它也是一個數組的事實是巧合的。 – Guss

回答

0

我的問題是爲什麼?或者這種行爲的JavaScript邏輯是什麼?

大致出於同樣的原因,+意味着加法而不是減法。換句話說,這就是它指定的意思。

Javascript具有包含屬性的對象,並且此屬性被包括在內(從很早以前的JS - 近二十年前)作爲迭代這些屬性的一種方式。恰巧在數組的情況下,索引對應於屬性。

相關問題