引用类型指向-变量交换

let arr = [
  { name: '张飞' },
  { name: '刘备' },
  { name: '赵云' },
  { name: '关羽' },
]

let a = arr[0]
arr[0] = arr[arr.length - 1]
arr[arr.length - 1] = a

console.log(arr)
//  [{ name: '关羽' },{ name: '刘备' },{ name: '赵云' },{ name: '张飞' }]

在 JavaScript 中,对象是通过引用来传递的。当你将变量 a 设置为 arr[0] 时,实际上是将 a 指向了 arr 中第一个元素所引用的对象。当你执行 arr[0] = arr[arr.length - 1] 时,只是改变了 arr 中第一个元素的引用,而并没有改变 a 的引用。换句话说,arr[0] 和 a 最初指向同一个对象,但当你执行 arr[0] = arr[arr.length - 1] 后,arr[0] 指向了另一个对象,而 a 依然指向原来的对象。所以,即使你交换了 arr[0] 和 arr[arr.length - 1],a 的引用并不会随之改变。如果你想要 a 跟着 arr[0] 的变化而变化,你可以使用深拷贝或者其他方法来实现。
引用类型指向-变量交换_第1张图片

你可能感兴趣的:(引用类型指向-变量交换)