4

如果您创建这样的对象:

building[45] = new Object();        
building[45].name = myName; 
building[45].price = parseInt(myPrice);

building[128] = new Object();       
building[128].name = myName;    
building[128].price = parseInt(myPrice);

现在,如果我想building[128]在一个函数中使用,最好将它分配给一个临时变量,这样浏览器就不必遍历所有对象来查找building[128]属性?

例子:

var theID = 128;
var temp = building[theID]; //temp.name & temp.price

还是直接使用building[theID].nameand building[theID].price

它们的查找方式有什么不同吗?

4

2 回答 2

4

数组访问是一个常数时间操作(在 Big-O 表示法中,这是O(1))。换句话说,浏览器访问building[128].

在这种情况下,我仍然建议将数组项存储在变量中。这样做的主要原因是 JavaScript 缩小程序将能够将变量重命名为短名称,例如a,以便属性访问a.name等等。这在这里和那里节省了几个字节,并且在更大的范围内,总字节节省是显着的。

JavaScript 数组是 JavaScript 对象的一种特殊形式,数组索引实际上只是恰好是整数的属性名称。 JavaScript:权威指南,大卫弗拉纳根

使用 Flanagan 对数组的定义,每次通过索引访问数组项时,实际上是在开始一个两步过程:访问数组对象,然后通过属性名称(索引)查找值。通过将数组项保存在变量中,访问它就像查看内存中的值一样简单。

于 2013-03-27T03:41:03.030 回答
0

或者,您可以像这样构建:

building[45] = {
    name: myName,
    price: parseInt(myPrice, 10)
};

building[128] = {
    name: myName,
    price: parseInt(myPrice, 10)
};

编辑:哦,我看到您的问题与我阅读的方式不同。对不起。我会在这里保留这个答案,因为它可能会有所帮助。

于 2013-03-27T04:02:51.620 回答