通过引用传递的javascript数组属性

时间:2012-01-02 06:00:30

标签: javascript pass-by-reference

在这个例子中,似乎我们可以使用变量(此处为“second”)来填充数组myArray,就好像secondmyArray的“引用”:这真的发生在这里吗?

var myArray = [];
var second = myArray;
    second.target = … //we fill the "second" variable
    second.offsetX = …
    second.offsetY = …

var target = myArray.target; //then we retrieve the result from myArray
if (target) {

由于

4 个答案:

答案 0 :(得分:2)

  

第二个是myArray的“参考”:这真的发生在这里吗?

是的。

JavaScript中的类似对象的数组传递并通过引用分配

在您的示例中,myArraysecond都指向内存中的同一个对象

答案 1 :(得分:1)

是的,这正是这里发生的事情。当您(例如)将新元素推送到second时,您可以稍后从myArray阅读它们。

顺便说一句,我觉得你做的很奇怪。为什么在 数组 上设置offsetX

答案 2 :(得分:1)

这称为shallow copy。您有一个对原始数组(var second = ...)的引用(var myArray = ...),它们都指向JavaScript虚拟机内存中的相同内存。

这样您就可以secondmyArray访问数组。

答案 3 :(得分:1)

var myArray = []; 

这只是一个数组声明它与var myArray=new Array();

相同

关于阵列引用

var second = myArray; 

我们将变量指向myArray内存位置。这里将创建指向myArray内容的新Object。所以,如果你阅读第二个内容。它会读取myArray。但是,你编辑/更新第二个内容,myArray的内容将被复制到第二个,它将被修改。正如Bakudan所说,它是浅层副本。请参阅下面的示例

var myArray=[10,20,30];
var second =myArray; //second will contain 23,45 and 100.

如果我们第二次更新数组,second=[100,200,300] 原始内容将被清理,并将写入100,200,300。

要在不删除原始内容的情况下将内容附加到数组,我们需要使用函数push,如下所示:

second.push(100);second.push(200),second.push(300);

现在,第二个内容将是10,20,30,100,200,300。

对象属性:

second.target = "testString";
second.offsetX =87;
second.offsetY =56;

这是对象属性的创建。它与

相同
second={"target":"testString","offsetX":87,"offsetY":56};

如果您想访问值87,可以访问second.offsetX or second[offsetX]

有关java脚本的更多信息可以使用here