对象 属性 的值未按预期更改

Value of object property not changed as expected

我只是想知道为什么在我的代码中我在方法中更改了cr = 6,但是打印原始obj cr值时,它并没有更改为6,而是保持其原始值。为什么?如果我改为使用 cr.next = 6,则原始 obj 中的值会发生变化。我预计 obj.next = 6。生成的输出是:

{
  val: 1,
  next: {
    val: 2,
    next: {
      val: 3,
      next: null
    }
  }
} 

我希望输出是这样的:

{
  val: 1, 
  next: 6
}

let obj = {
  val: 1,
  next: {
    val: 2,
    next: {
      val: 3,
      next: null
    }
  }
}

cr = obj.next;
cr = 6;
console.log(obj)

第一部分,

cr = obj.next;

表示“标识符(单词cr)的值是对象obj.next所在内存位置的值”

cr = 6;

表示“完全忽略 cr 的任何先前值;标识符 cr 的值现在是整数文字 6


JavaScript,与 C/C++(使用指针,或按引用传递与按值传递)不同,没有办法更改对象的值单个标识符(变量名)。它可以改变变量的值,但不能改变它之前指向的对象。

let obj = {
  val: 1,
  next: {
    val: 2,
    next: {
      val: 3,
      next: null
    }
  }
}

cr = obj.next;
cr = 6;

console.log(obj)
console.log("...........................")
obj.next = 6
console.log(obj)
console.log("...........................")
console.log(cr)

cr = obj.next;
cr = 6;

当您执行 cr = obj.next 时,它会创建一个新变量并将 obj.next 值分配给 cr。之后,您将 6 分配给 cr,这样它会覆盖 cr 的当前值,并且只有 6。

如果你想要{val: 1, next: 6}这样的答案,你应该写obj.next = 6 这样你就得到了你想要的输出。

我希望它能帮助你“继续编码”。