2

如果我有以下代码:

<html>
    <body>
        <script type="text/javascript">
            var mycars = new Array();
            mycars[0] = "Saab";
            mycars[1] = "Volvo";
            mycars[2] = "BMW";

            var x = 1;

            document.write("Value of x: " + x + "<br /><br />");

            for (x in mycars)
            {
                document.write(x + ": " + mycars[x] + "<br />");
            }

            document.write("<br />Value of x: " + x + "<br />");
            document.write("Number of cars: " + mycars.length);
        </script>
    </body>
</html>

我得到输出:

Value of x: 1

0: Saab
1: Volvo
2: BMW

Value of x: 2
Number of cars: 3

在不将 for-in 循环更改为 for 循环的情况下,有没有办法让它不显示第一个元素(“Saab”)?我希望输出为:

Value of x: 1

1: Volvo
2: BMW

Value of x: 2
Number of cars: 3
4

3 回答 3

4

不要使用for..in循环遍历数组。仅用于for..in循环对象。否则会产生意想不到的后果,这似乎令人费解。

使用标准for循环:

for (var i = 0; i < mycars.length; i++)
{
    document.write(i + ": " + mycars[i] + "<br />");
}

如果您想错过第一项,请设置i1最初,而不是0. 您可能应该在其中添加评论,这样您就知道如果您回到这段代码会发生什么。

于 2011-01-09T09:10:33.307 回答
3

无论如何,您都不应该使用 for..in 循环来遍历数组。来自MDC

“另外,因为迭代的顺序是任意的,对数组进行迭代可能不会按数字顺序访问元素。”

所以你不仅不能跳过“第一个”元素,你甚至不能依赖第一个元素是一致的!

于 2011-01-09T09:10:25.260 回答
-1

为了达到你想要的,有这样的代码:

var x = 1;
document.write("Value of x: " + x + "<br /><br />");
while (x < mycars.length) {
{
    document.write(x + ": " + mycars[x] + "<br />");
    x++;
}
x--;

document.write("<br />Value of x: " + x + "<br />");
document.write("Number of cars: " + mycars.length);
于 2011-01-09T09:14:43.577 回答