【问题标题】:Array value not updated after changing variable value更改变量值后未更新数组值
【发布时间】:2017-04-28 22:22:31
【问题描述】:

在 javascript 中,为什么列表不使用变量更新?

var x = 5;
var l = [x];
x += 6;

为什么l 还是 5 而不是 11?有没有办法让它用变量更新?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    l 是值列表,而不是指针列表。为了模拟您尝试做的事情,您可以存储可变对象并对其进行变异。

    var x = { val: 5 };
    var l = [x];
    x.val += 6;
    console.log(l); // [{ val: 11 }]
    

    【讨论】:

      【解决方案2】:

      与对象不同,原始值是不可变的。更改它们后,您必须重新分配它们。

      var l = [x];
      x += 6;
      var l = [x]; // new value updation.
      

      由于您不持有对数组的引用,因此分配了一个新数组。

      如果你持有对数组的引用,你可以只更新变量而不是整个数组。

      var arr = [x];
      var l =  arr;
      x += 6;
      arr[0] = x; // new value updation at position 0.
      

      【讨论】:

      • var l = [x += 6] 也是一种简便的方法。
      【解决方案3】:

      我的理解是,这其实很简单:

      Javascript 总是按值传递,但是当一个变量引用一个对象(包括数组)时,“值”就是对该对象的引用。

      更改变量的值永远不会改变底层基元或对象,它只是将变量指向一个新的基元或对象。

      但是,更改由变量引用的对象的属性确实会更改底层对象。

      更新数组值的唯一方法是重新分配它。

      【讨论】:

        【解决方案4】:

        变量不会自行更新。你必须重新定义它。

        var x = 5;
        var l = [x];
        x += 6; // x has changed but l has not, because you defined it to be old x
        l = [x] // redefine it to be new x
        console.log(l);

        【讨论】:

          【解决方案5】:
          var x = 5;
          x +=6; 
          var l = [x];
          

          有了这个 var l 将是最新的

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-09-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-05-08
            • 2017-08-14
            • 1970-01-01
            相关资源
            最近更新 更多