我在 JavaScript Ninja 的秘密一书中读到,如果浏览器支持,我们可以使用它document.all["id"]
来获取文档中具有此类 ID 的所有元素。(尽管据说我们应该只有一个具有特定 ID 的元素)。
但是document.all
返回一个HTMLAllCollection
对象,我在 Chrome 中看到它有 9 个元素,比如一个数组(9 个元素,在 jsfiddle 中设置)。所以我可以理解为什么document.all[9]
可以返回元素,但为什么也可以document.all["foo"]
返回呢?如果我们定义var obj = { foo : 123 }
,那么我们可以说obj["foo"]
,但document.all
不是一个有键的对象foo
。所以据说,document.all["foo"]
不应该能够返回这样的元素。
注意:这个问题不是问 的使用document.all
,也不是问页面上是否有两个具有相同 ID 的元素。它询问为什么一个obj
似乎没有密钥的对象foo
能够使用obj["foo"]
我不知道为什么这不是一个有效的编程问题来给出一个值。
示例代码:
1 个具有此类 ID 的元素:http:
//jsfiddle.net/ArR5x/5/
2 个具有此类 ID 的元素:http:
//jsfiddle.net/ArR5x/10/
更新:丹涛是正确的。这是因为有些属性是可枚举的,有些不是,如果支持 ECMAScript 5,我们很容易产生相同的情况:http: //jsfiddle.net/Akdp9/12/这是一个关于 JavaScript 的有效问题,而真正的问题是答案是由于属性的可枚举属性。