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对数组访问的工作方式做出了错误的假设。因此,简单的回答是,这并不重要,因为这两种方法在时间复杂度方面实际上是等效的。