[英]for … in loop with string array outputs indices
當我寫一些像這樣的javascript:
var words = ['word1', 'word2', 'word3']
for (word in words) {
console.log(word)
}
結果輸出是相應單詞的數字索引。 我在Google上進行了一些搜索,但我找不到這種行為的確切原因。 我猜這是完全預期的行為,但我想知道原因。
謝謝!
為什么沒有人提供正確的答案? 你永遠不會用for/in
循環迭代數組 - 這只是為了迭代普通對象及其鍵,而不是迭代數組中的項。
你為這樣的for循環迭代數組:
var words = ['word1', 'word2', 'word3'];
for (var i = 0, len = words.length; i < len; i++) {
// here words[i] is the array element
}
或者,在現代瀏覽器中,您可以使用數組的.forEach()
方法:
var words = ['word1', 'word2', 'word3'];
words.forEach(function(value, index, array) {
// here value is the array element being iterated
});
有關.forEach()
更多信息,請參見MDN 。
ndp對這篇文章的引用顯示了使用for/in
with arrays可能出錯的一些很好的例子。 你有時可以使它工作,但它不是編寫Javascript數組迭代的聰明方法。
或者,在更現代的時候,您可以使用ES6 for/of
構造,該構造專門用於迭代迭代(數組是可迭代的):
var words = ['word1', 'word2', 'word3'];
for (const w of words) {
console.log(w);
}
或者,如果您同時需要值和索引,則可以執行以下操作:
var words = ['word1', 'word2', 'word3'];
for (const [index, w] of words.entries()) {
console.log(index, ": ", w);
}
有幾個優點for/of
超過.forEach()
首先,你有更多的循環控制,因為你可以使用break
, continue
, return
來控制.forEach()
沒有給你的循環流。 此外,回調函數沒有額外的開銷,因此在某些環境中,它可以更快。
正如其他答案正確指出的那樣, for...in
不是為了迭代數組。 現在可以在較新的JavaScript引擎和轉換器中使用更好的選項,例如TypeScript with for...of
:
var words = ['word1', 'word2', 'word3']
for (word of words) {
console.log(word)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.