2012-11-10 3 views
3

Я просто итерацию через объект с JavaScript для (ключ в OBJ) Синтаксис:Javascript итерация объекта - первый элемент не определен

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

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

Я узнал в Firebug отладчика (Firefox), что первые наборы итерации цикла I до неопределенной, и, тем не менее, вторая итерация устанавливает i в 'id'. Из-за этого у меня есть некоторые проблемы в моем коде. Нормально ли, что первая итерация дает undefined? Имеет ли это какое-то отношение к нотации JSON, отсутствующему прототипу и т. Д.?

+2

Я не получаю undefined: http://jsfiddle.net/y2Dze/3/ – gdoron

+2

Я думаю, что это нормальное поведение с FF. Я видел это поведение каждый раз, когда я запускал цикл в firefox. – Anoop

+0

Похоже, что firebug инициализирует все на первой итерации, а затем запускает фактический цикл. – Anoop

ответ

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() гарантирует, что они игнорируются.

Смежные вопросы