Javascript 中的奇怪行为增强了 for...in 循环

2024-03-04

我正在使用 canvas 标签制作一个 Javascript 游戏,并且使用增强的 for 循环来更新玩家位置。

简单来说:

var actors = new Array();

var player = new Actor(0, 0, img);

actors[0] = player;

function update_positions() {
    //position 1
    for(var a in actors) {
        //position2
        a.xpos += a.xvel;
        a.ypos += a.yvel;
    }
}

就在位置 1 的 for 循环之外,我可以访问 actor[0].xvel 的正确值。在 for 循环内的位置 2 处,a.xvel 未定义。有人可以向我解释发生了什么事吗?


The for...in https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Statements/For...in语句旨在用于迭代对象属性,通过查看你的代码似乎actors是一个数组(您正在使用索引设置初始元素0).

这份声明也将crawl up http://www.jslint.com/lint.html#forin原型链,如果你已经扩展了Array.prototype这些属性将被迭代,并且迭代的顺序也不受保证。

我建议你避免problems http://yuiblog.com/blog/2006/09/26/for-in-intrigue/并使用普通的 for 循环进行迭代:

for (var i = 0; i < actors.length; i++) {
    actors[i].xpos += actor.xvel;
    actors[i].ypos += actor.yvel;
}

如果我错了,并且actors不是数组,我建议您使用hasOwnProperty方法,以确保该属性存在于对象本身中,而不是存在于原型链中的某个位置:

for (var name in object) {
  if (object.hasOwnProperty(name)) {
    //
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript 中的奇怪行为增强了 for...in 循环 的相关文章

随机推荐