将对象分配给临时变量

时间:2013-03-27 03:37:18

标签: javascript performance

如果你创建这样的对象:

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].namebuilding[theID].price

他们的查询方式有什么不同吗?

2 个答案:

答案 0 :(得分:4)

数组访问是一个恒定时间操作(以Big-O表示法,这是O(1))。换句话说,在访问building[128]之前,浏览器需要迭代超过127个项目。

既然如此,我仍然建议将数组项存储在变量中。这样做的主要原因是JavaScript缩小程序将能够将变量重命名为a之类的短名称,以便属性访问为a.name等等。这样可以节省一些字节,并且在更大的范围内节省的总字节数很多。

  

JavaScript数组是JavaScript对象的一种特殊形式,数组索引实际上只是属于整数的属性名称。   JavaScript: The Definitive Guide, David Flanagan

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

答案 1 :(得分:0)

或者,您可以这样构建:

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

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

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