【问题标题】:javascript array attributes passed by reference通过引用传递的javascript数组属性
【发布时间】:2012-01-31 15:25:45
【问题描述】:

在这个例子中,似乎我们可以使用一个变量(这里是“秒”)来填充数组myArray,好像second 是对myArray 的“引用”:这真的是这里发生的事情吗? ?

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) {

谢谢

【问题讨论】:

    标签: javascript pass-by-reference


    【解决方案1】:

    second 是对 myArray 的“引用”:这真的是这里发生的事情吗?

    是的。

    JavaScript 中的对象(如数组)通过引用传递和分配。

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

    【讨论】:

      【解决方案2】:

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

      顺便说一句,我感觉你在做一些奇怪的事情。为什么要在数组上设置offsetX

      【讨论】:

      • 你是对的。我认为,他只是在测试对象属性。 @Paul,offsetX 和 offsetY 是鼠标位置相关的属性。因此,最好避免使用相同的属性名,这些属性名已经在 java 脚本中定义。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:
        var myArray = []; 
        

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

        关于数组引用

        var second = myArray; 
        

        我们将变量 second 指向 myArray 内存位置。这里将创建第二个新对象,指向 myArray 的内容。因此,如果您阅读第二篇的内容。它将读取 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 script Array 的信息请见here

        【讨论】:

          猜你喜欢
          • 2011-01-23
          • 1970-01-01
          • 2012-08-12
          • 2020-10-12
          • 2018-07-09
          • 1970-01-01
          • 2010-11-27
          相关资源
          最近更新 更多