我想用几个字符串做同样的事情。我想这样做:
names = ["NOTE", "REPLICA", "HINT", "VIEW"];
for (name in names) {
name = names[name];
//do stuff
}
然后我读了this。它还可以吗?
答案 0 :(得分:1)
最好使用数字来浏览数组:
var i = 0;
for(i=0;i<names.length;i++){
...
}
你链接到的文章已经提到过,任何其他对象属性,包括Array.prototype或Object.prototype上的东西都会显示在for ... in
另一个不使用它的原因是因为.. in for Array's更慢
那篇文章确实提到了一个边缘情况,当数组的长度很大但只设置了几个项目时,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]);
}
}
答案 1 :(得分:0)
比使用for loop
慢得多。
浏览器中的86% slower
左右(Google Chrome 28.0.1500.72)。
查看我制作的benchmark
虽然for..in
循环仅在110,772 ops/sec
(仍然很快)运行,for
循环运行在791,792 ops/sec
我通常使用for..in
循环objects
。我相信这就是他们的实际目的。