将非Array Javascript属性作为整数索引访问,例如的NamedNodeMap

时间:2013-05-24 17:01:12

标签: javascript

所以NamedNodeMap是一个包含方法getNamedItemsetNamedItem和其他一些方法的javascript类。它包含只读整数属性length,可通过索引访问,例如attributes[0]

我的问题是如何在Javascript中实现?它不是Array,也不包含pushpop方法。但是Javascript属性是字符串,0是数字,据我所知,在使用[ ]表示法访问时,它不会被强制转换为字符串。

这是如何在Javascript代码中实现的,它是如何在语法上处理的?

2 个答案:

答案 0 :(得分:1)

实际上,它被强制成一个字符串......

x = {}

x[0] = 3;

x["0"] // 3;

......这使得实施起来不是很有趣:

attributes = {}
attributes.length = attributes[0] = 3'

答案 1 :(得分:0)

这将是一个类似Javascript数组的对象。 This article有一个很好的解释。从链接文章中引用的示例代码:

var a = {};  // Start with a regular empty object

// Add properties to make it "array-like"
var i = 0;
while(i < 10) {
    a[i] = i * i;
    i++;
}
a.length = i; // magic!!

// Now iterate through it as if it were a real array
var total = 0;
for(var j = 0; j < a.length; j++)
    total += a[j];

注意a.length = i步骤使对象看起来像最终用户的数组,因此可以迭代它。

FTR让我感到困惑(这是一个自我回答)是Chrome的Dev Tools在显示NamedNodeMap时添加了元数据。但JS级没有任何“幻想”。