【发布时间】: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