2011-01-10 68 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-each循环这种情况的正确的工具,但你应该检查在循环中的每个指标实际上属于对象,而不是父:

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

有趣,谢谢。现在,我根本无法找到链接,但是有人在SO上评论了关于javascript数组和对象引用的问题 - 并对它们进行了比较。他说一个人就像另一个......这一点都没有澄清。但是,如果你正在阅读好友,你还写了一篇关于航海家号飞船的文章,以及它如何接近星际边界......他基本上说使用for循环并不总是可靠的。我希望我能找到那篇文章,因为这是促使我问:/ – danjah 2011-01-10 01:55:29