【问题标题】:JavaScript Type Error Index i+1JavaScript 类型错误索引 i+1
【发布时间】:2015-11-17 09:07:17
【问题描述】:

我正在尝试在对象内部编写一个简单的 for 循环。本质上,它所做的是在它加上 delta 之前设置对象的 Z 位置,除了第 0 个对象只是简单地将 delta 添加到它的原始位置。以下是我用来执行此操作的代码:

        this.objs[0].setZ(this.objs[0].getZ()+delta);
        var i;
        for (i = 0; i < this.n; i++) {
            this.objs[i+1].setZ(this.objs[i].getZ()+delta); 
            alert("i = " + i + " i+1 =" + i+1);
        } 

由于某种原因,警报在第一次传递时返回 i = 0 i+1 = 01,在第二次传递时返回 i = 1 i+1 = 11。这似乎将 i 视为字符串或其他东西,因为我希望警报在第一遍打印出 i = 0 i+1 = 1i = 1 i+ 1 = 2 在第二个。

我认为我在 Firefox 开发工具中运行代码时遇到的以下 TypeError 似乎证实了这一点。

TypeError: this.objs[(i + 1)] is undefined

我到底在做什么错 i+1 是错误的类型?

----编辑----

我注意到 for 循环超出了范围,因此我将其更改为:

    for (i = 1; i < this.n; i++) {
        this.objs[i].setZ(this.objs[i-1].getZ()+delta); 
        alert(this.n);
    } 
}

(this.n 的值 = 3)。出于某种原因,当 i=3 时,它会一直循环。我不知道为什么..

【问题讨论】:

    标签: javascript arrays indexing typeerror


    【解决方案1】:

    确实使用字符串连接而不是加法,但这不会导致您的错误。在循环的最后一次运行中,i 等于 n - 1,但您正在尝试访问不存在的元素 n。在 for 循环中将 i &lt; this.n 更改为 i &lt; this.n - 1

    【讨论】:

    • 或者反向迭代for(var i = this.n; i &gt; 0; i--),我发现它更容易阅读并且可以更快; stackoverflow.com/questions/8689573
    • @DaveAnderson 我想你的意思是for(var i = this.n - 1; i &gt; 0; i--)。否则你会得到另一个错误。
    • @ryanmattscott 打印的this.n 的值是多少?为什么不使用this.objs.length
    • this.nthis.objs.length 都是 3。我会切换到 this.objs.length,我没想过那样做。肯定更好,我只是倾向于专业地做事。
    猜你喜欢
    • 2018-07-29
    • 2019-09-09
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2021-12-16
    • 2019-03-30
    • 2018-10-15
    • 2015-11-08
    相关资源
    最近更新 更多