JavaScript中的参考数组元素

时间:2017-12-21 20:13:23

标签: javascript syntax

假设我在JavaScript中有以下代码:

var x = 2;
var myArray = [0,1,x];
x = 3;

更改x的值会使myArray完全保持不变,因此myArray[2]仍为2.

如何设置它以便我可以在myArray[*wherever x is*]重复更改元素而不实际知道索引?

2 个答案:

答案 0 :(得分:4)

您可以将您的值放在一个对象中。

var x = {
  value: 2
}
var myArray = [0,1,x];
console.log(myArray[2].value); // 2

x.value = 3;
console.log(myArray[2].value); // 3

在这种情况下,您总是指向同一个对象,其内容可以随时更改。

答案 1 :(得分:4)

您可以定义一个充当活动变量引用的getter:

var myArray = Object.defineProperty([0,1], 2, {
    get() { return x },
    enumerable: true,
    configurable: true
});
var x = 2;
console.log(myArray);
x = 3;
console.log(myArray);

当然,这对阵列来说是一件可怕的事情,并且可能会在使用阵列的每个地方造成严重的性能损失。所以:不要这样做。只需在每个地方分配myArray[2]而不是x,或使用getter / setter函数对代替执行此操作的x变量。

function setX(v) { myArray[2] = v; }
var myArray = [0,1,2];
setX(2);
console.log(myArray);
setX(3);
console.log(myArray);