【发布时间】:2016-08-25 07:27:20
【问题描述】:
我希望使用 swap 函数交换两个对象,并仅引用它们。
一个典型的用例是这样的:
function swap(a, b) {
...
}
var a = [ { id: 1 }, { id: 2 } ]
swap(a[0], a[0])
console.log(a) // [ { id: 2 }, { id: 1 } ]
var one = { id: 1 }
var two = { id: 2 }
swap(one, two)
console.log(one) // Should be { id: 2 }
console.log(two) // Should be { id: 1 }
(添加了更多用例。swap 不应依赖于任何数组功能。)
这可能吗?我知道 javascript 的功能是复制引用source。所以本质上,swap(a, b) 的a 和b 只是a[0] 和a[1] 的副本,所以如果不实际将a 的字段复制到b 的字段,反之亦然,这似乎不切实际。
编辑:@timolawl 指出了 ES6 的解构,但它似乎不适用于这个用例:
let a = [{ id: 1 }, { id: 2 }]
let one = a[0]
let two = a[1]
console.log(a[0])
console.log(a[1])
[one, two] = [two, one]
console.log(a[0])
console.log(a[1])
【问题讨论】:
-
可能想要编辑最后一部分以说明这不是代码本身的错,而是因为解析器必须猜测 ASI 的位置。第一个
console.log(a[1])之后的分号解决了这个问题,因为解析器错误地将代码假定为console.log(a[1])[one...
标签: javascript