Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象指定给临时变量_Javascript_Performance - Fatal编程技术网

Javascript 将对象指定给临时变量

Javascript 将对象指定给临时变量,javascript,performance,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[45] = {

如果创建如下对象:

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[45] = {
    name: myName,
    price: parseInt(myPrice, 10)
};

building[128] = {
    name: myName,
    price: parseInt(myPrice, 10)
};
现在,如果我想在函数中使用
building[128]
,是否最好将其分配给一个临时变量,这样浏览器就不必遍历所有对象来查找
building[128]
属性

例如:

var theID = 128;
var temp = building[theID]; //temp.name & temp.price
或者直接使用
building[theID]。name
building[theID]。price


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

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

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

JavaScript数组是JavaScript对象的一种特殊形式,数组索引实际上只不过是恰好是整数的属性名。


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

或者,您可以这样构建:

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[45] = {
    name: myName,
    price: parseInt(myPrice, 10)
};

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

编辑:哦,我看你的问题和我读的不一样。很抱歉我将把这个答案保留在这里,因为它可能会有所帮助。

不,没有difference@theshadowmonkey你能为此提供支持吗?(我也很好奇,但需要一些证明)同样,我想知道关于如何在内存中查找数据的技术信息,以及如何使用parseInt(whatev,10)。缺少第二个参数会导致太多愚蠢的错误。我真希望它是必需的。@Dave在你的程序中有没有办法让你知道数字128?如果是这样,则访问it building[theId]或使用temp是相同的。我认为我的答案与此完全不同。删除它:)那么
building[128]
是一个指针,就像临时变量一样?我与第一部分相矛盾,因为迭代数组也是O(1)@theshadowmonkey呃。。。不,在数组上迭代几乎就是O(N)@ben336的定义。抱歉,我有点困惑。我想知道时间复杂性在这里很重要,因为即使将值赋给temp var,该值也会被迭代。Dave补充了有关数组访问如何工作的其他信息,以帮助回答您的指针问题@在Shadowmonkey中,我之所以提到复杂性,是因为OP对数组访问的工作方式做出了错误的假设。因此,简单的回答是,这并不重要,因为这两种方法在时间复杂度方面实际上是等效的。