2011-01-10 5 views
2

Рассмотрим, у меня есть этот объект:Безопасно ли ссылаться на свойства объекта по индексу?

var ob = { 
    "page1.html" : {...}, 
    "page2.html" : {...}, 
    "page3.html" : {...} 
} 

Я не могу изменить это массив, я не имею доступ к тому, что я хотел бы знать, если это безопасно для доступа к свойства объекта по индексу, так:

var obVal = ob[0]; // reliably returns "page1.html"'s value every time 

Я знаю, что для каждого цикла не следует использовать в этой ситуации, потому что значения хэшируются или что-то? Но ссылка по индексу может быть в порядке?

ответ

8

Нет, ob[0] не будет работать - он даст undefined. В самом деле, если ваш объект был:

var ob = { 
    "0": "blah", 
    "page1.html" : {...}, 
    "page2.html" : {...}, 
    "page3.html" : {...} 
} 

ob[0] даст вам "blah".

для-каждого цикла является правильным инструментом для этой ситуации, но вы должны просто проверить, что каждый индекс в петле на самом деле принадлежит к объекту, а не к родителю:

for (var i in ob) { // i will be "page1.html", "page2.html", etc... 
    if (!ob.hasOwnProperty(i)) continue; 
    // Do something with ob[i] 
} 
+0

интересного, Благодарю. теперь я просто не могу найти ссылку, но кто-то из них прокомментировал вопрос о массивах javascript по сравнению с объектными ссылками - и сравнил их. он сказал, что один был похож на другого ... ах, это не совсем понятно. но, если вы читаете приятеля, вы также написали статью о космическом корабле Voyager и о том, как она приближалась к межзвездной границе ... он в основном сказал, что использование цикла for in не всегда надежно. Хотелось бы, чтобы я смог найти эту статью, потому что именно это побудило меня спросить:/ – danjah

+1

@ Danjah Ну, заказ не гарантируется, если это то, что вам интересно. Или, может быть, вы беспокоитесь об увеличении объекта, hasOwnProperty позаботится об этом. – Hemlock

+0

Да, порядок здесь определенно важен, извините, я подумал, что было ясно - да, пожалуйста, пожалуйста! – danjah

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