【问题标题】:JavaScript variable assignment [duplicate]JavaScript变量赋值[重复]
【发布时间】:2017-07-01 14:13:45
【问题描述】:

也许问题已经存在,但我没有找到任何东西,因为我不知道如何调用这个问题。

我有一个对象函数,想把对象变量赋值给一个变量:

this.myFunction = function() {
    var selection;                // internal variable
    selection = this.selection;   // both are [0,0]

    console.log(this.selection);  // result: [0,0]

    selection[0] = 500;           // set internal variable[0] 500
    console.log(selection);       // result: [500,0]
    console.log(this.selection);  // result: [500,0] <-- expected: [0,0]
}

如何在不改变其他变量的情况下改变局部变量?

【问题讨论】:

  • 您需要创建数组的副本。
  • javascript 分配总是通过对象的引用,如果你也想知道原因
  • Arrays are list-like objects whose prototype has methods to perform traversal and mutation operations. 这意味着每当您将数组分配给另一个变量时,它只是一个 mutator。这不是深度克隆。
  • @Kaddath:这是一个常见的误解,而不是 by reference 的意思。 JavaScript 按值传递,但值是a 引用(对对象)。
  • 在 JS 中,对象(和数组都是对象)通过 reference 传递——因此,selection 和 this.selection 引用同一个数组。如果您希望它们有所不同,则必须按照其他评论者的建议进行操作并复制该数组(array.slice 应该是一个不错的选择)。

标签: javascript variables object variable-assignment


【解决方案1】:

当您调用selection = this.selection 时,您正在复制this.selection 值的引用。所以当你改变局部变量selection时,你也在改变this.selection

您必须使用值中的方法slice() to create a new array。像这样:

selection = this.selection.slice();

【讨论】:

  • selection = this.selection.slice() 工作谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-27
  • 2013-09-13
  • 2016-03-26
  • 2017-06-20
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多