我想用幾個字符串做同樣的事情。我想這樣做:這個用法是否可以接受?
names = ["NOTE", "REPLICA", "HINT", "VIEW"];
for (name in names) {
name = names[name];
//do stuff
}
然後我讀了this。它還好嗎?
我想用幾個字符串做同樣的事情。我想這樣做:這個用法是否可以接受?
names = ["NOTE", "REPLICA", "HINT", "VIEW"];
for (name in names) {
name = names[name];
//do stuff
}
然後我讀了this。它還好嗎?
這是更好地使用一些通過陣列走:
var i = 0;
for(i=0;i<names.length;i++){
...
}
您鏈接到已經提到的文章,任何其他對象的屬性,包括東西上Array.prototype或Object.prototype中會for ... in
另一露面不使用它的原因是因爲Array中的.. in比較慢。
那篇文章確實提到了一個邊緣情況,其中for ... in
在數組長度較大時可能會更快,但只設置了幾個項目。在這種情況下,我想你可以使用for ... in
與hasOwnProperty
和檢查,如果該屬性是一個數字:
var stuff, index;
stuff = [];
stuff[0] = "zero";
stuff[9999] = "nine thousand nine hundred and ninety-nine";
stuff.name = "foo";
for (index in stuff)
{
if (stuff.hasOwnProperty(index) && String(Number(index)) === index) {
console.log("stuff[" + index + "] = " + stuff[index]);
}
}
這比只使用一個for loop
慢了許多。
約在86% slower
在我的瀏覽器中(谷歌瀏覽器28.0.1500.72)。
看看這個benchmark我做了。
雖然for..in
循環只跑在110,772 ops/sec
(仍然快),for
循環在791,792 ops/sec
跑到我通常使用for..in
循環與objects
。我相信這就是他們實際的目標。
如果它在所有您想要使用它的環境中按預期工作,那麼就沒關係。 –
關鍵在於:_「'for..in'遍歷對象的可枚舉屬性名稱,而不是數組的索引」_「。所以'for'循環更好。使用'for..in'來循環數組並不被認爲是好的做法。 – elclanrs
我將通過模塊一起在未知環境中工作。 – Glycan