通过索引引用对象的属性是否安全?

dan*_*jah 2 javascript arrays indexing object

考虑一下,我有这个对象:

var ob = {
  "page1.html" : {...},
  "page2.html" : {...},
  "page3.html" : {...}
}
Run Code Online (Sandbox Code Playgroud)

我无法将其更改为数组,我无法访问它,我想知道的是,通过索引访问对象属性是否安全,因此:

var obVal = ob[0]; // reliably returns "page1.html"'s value every time
Run Code Online (Sandbox Code Playgroud)

我知道在这种情况下不应该使用每个循环,因为值是经过哈希处理的吗?但是通过索引引用可能没问题?

Dav*_*ang 8

不,ob[0]甚至不会工作 - 它会给undefined.事实上,如果您的对象是:

var ob = {
  "0": "blah",
  "page1.html" : {...},
  "page2.html" : {...},
  "page3.html" : {...}
}
Run Code Online (Sandbox Code Playgroud)

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]
}
Run Code Online (Sandbox Code Playgroud)