【问题标题】:Value of array is changing with value of object数组的值随着对象的值而变化
【发布时间】:2021-10-22 17:52:37
【问题描述】:

当我使用 push 方法将一个对象放入数组中,然后更改对象的值时,数组中对象的值也会发生变化。如何预防?

function onLoad() {
    let array = []
    let object = {}
    object[1] = [1,2]
    array.push(object)
    object[1] = [1,3]
    console.log(array)
}

onLoad();

我想要代码控制台 [{1,2}],但它会控制台 [{1,3}]。

有人知道如何解决这个问题吗?

【问题讨论】:

  • JavaScript 中的对象是通过引用复制的。为了复制它们,有几种方法,具体取决于对象的复杂性。在这种情况下,使用 assign 应该合适。使用array.push(Object.assign({}, object)) 将克隆对象添加到数组中。

标签: javascript arrays javascript-objects


【解决方案1】:

在 JavaScript 中,复杂数据类型(对象和数组)通过引用复制,而原始数据类型(字符串、数字和布尔值)通过值复制

简单地说,通过引用传递不会创建副本而是引用相同的内存。 所以原来的对象和数组都会改变

按值复制将创建值的副本,因此原始值不会更改

function change(array1){

array1[0] = "changed";

}

var original = ["original"]
change(original)

console.log(original)


function changePrimitive(input) {
  input = "changed"

}

var original = "original"


changePrimitive(original)


console.log(original);

【讨论】:

    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多