JavaScript遍历对象-第一个元素未定义

3

我只是用Javascript中的for (key in obj)语法遍历一个对象:

var myObj = { id:'1', number:'2', name: 'my' };

var i, item;
for (i in myObj) {
    item = myObj[i];
}

我在火狐浏览器的Firebug调试器中发现,第一次循环迭代将'i'设置为未定义,而第二次迭代将'i'设置为'id'。由于这种行为,我的代码出现了一些问题。第一次迭代返回未定义,这是正常的吗?这与JSON符号表示有关还是缺少原型等问题?

2
我没有得到未定义:http://jsfiddle.net/y2Dze/3/ - gdoron
2
我认为这是FF的正常行为。每次在Firefox中运行循环时,我都看到了这种行为。 - Anoop
看起来 Firebug 在第一次迭代中初始化所有内容,然后开始实际循环。 - Anoop
我也尝试了jsfiddle,但你只能在调试器中看到它,而无法通过控制台登录。这可能是正常行为。我还有一个问题。我在for (i in ...)循环中使用continue语法,但它会在循环内部意外地跳转,导致结果出乎意料。在这样的for循环中不能使用continue关键字吗? - Michbeckable
1个回答

0

看起来完全正常。但是,您可能希望使用.hasOwnProperty()来确保属性属于对象而不是继承的:

var myObj = { id: "1", number: "2", name: "my" };
var i,item;
for (i in myObj) {
     if (myObj.hasOwnProperty(i)) item = myObj[i];
}

通常情况下,本地原型方法不会被枚举,因为它们不可枚举。然而,如果您使用的是Prototype或MooTools等框架,则它们添加的方法将被枚举并在循环中显示。.hasOwnProperty() 确保它们被忽略。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接