这种用法是否可以接受?

时间:2013-07-17 00:23:11

标签: javascript

我想用几个字符串做同样的事情。我想这样做:

names = ["NOTE", "REPLICA", "HINT", "VIEW"];
for (name in names) {
    name = names[name];
    //do stuff
}

然后我读了this。它还可以吗?

2 个答案:

答案 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。我相信这就是他们的实际目的。