将全局对象存储到数组中只是创建对这些对象的引用吗?

时间:2015-07-01 13:59:35

标签: javascript

很抱歉,如果以前曾经问过这个问题,但我需要一个比我在搜索中找到的一些复杂例子更直截了当的答案......

如果我创建了几个全局对象,假设它们被命名为JohnsonSmith等,之后我将它们推送到名为people的全局数组,如{{1 },people[0] = Johnson ...

我是否只是简单地创建了对该全局对象的引用,或者在数组中创建了某种副本?

因此,如果我选择通过迭代数组people[1] = Smith向每个对象添加新属性,我只是将新属性添加到原始全局对象,或者添加到全局对象和< / em>数组中的对象?

其次,在通过数组分配属性与在一开始就在单个全局对象内创建全局对象(如people[i].newProperty)时,是否会出现任何性能损失?我猜这没什么区别,但我想我会把它扔出去。

谢谢!

1 个答案:

答案 0 :(得分:2)

回答你的问题:

问:我是否只创建了对该全局对象的引用,或者是否在数组中创建了某种副本?

A:您确实创建了一个引用。

问:因此,如果我选择通过迭代数组为每个对象添加新属性,那么人们[i] .newProperty&#39;,我只是添加一个新的属性到原始全局对象,还是全局对象和数组中的对象?

A:您正在修改对象和数组中的对象,因为它们是相同的。

问:其次,在通过数组分配属性而不是在一开始就在单个全局对象中创建全局对象时会有任何类型的性能损失,例如&#39; People .Johnson&#39 ;?我猜测没有什么区别,但我想我会把它扔出去。

A:不,没有性能差异。

以下是一些很好的参考资料,供您更好地学习和理解javascript数组中对象的主题:

[1] Changing array in JavaScript function changes array outside of function?

[2] is it possible to change values of the array when doing foreach in javascript?

[3] http://orizens.com/wp/topics/javascript-arrays-passing-by-reference-or-by-value/

[4] http://www.hunlock.com/blogs/Mastering_Javascript_Arrays