虽然我意识到作为非原始数据类型的数组是由JavaScript中的引用处理的,而不是通过值处理的,但是该数组的任何特定元素都可以是原始数据类型,并且我假设它不是通过引用分配。
我想知道如何获取对数组中单个元素的引用,以便在更改该元素时不必继续引用数组和索引号?
即
var myElement=someArray[4]
myElement=5
//now someArray[4]=5
我是否误解了隐含的各种docs,但没有明确说明这不是预期的行为?
答案 0 :(得分:2)
您可以创建数组元素的副本,但不能创建用作数组属性引用的别名的值。对象属性也是如此;当然,数组元素引用是对象属性引用。
你可以得到的最接近的是创建一个带有setter的对象,该setter使用代码来更新你的数组。这看起来像是:
var someArray = [ ... whatever ... ];
var obj = {
set element5(value) {
someArray[5] = value;
}
};
然后:
obj.element5 = 20;
会更新someArray[5]
。这显然不是someArray[5] = 20
的改进。
编辑 - 现在,请注意,如果您的数组元素是一个对象,那么制作该元素的副本意味着将引用的副本复制到该对象。因此:
var someArray = [ { foo: "hello world" } ];
var ref = someArray[0];
然后:
ref.foo = "Goodbye, cruel world!";
将更新someArray[0]
引用的对象的“foo”属性。
答案 1 :(得分:1)
你总是可以传递一个闭包来更新它:
var myUpdater = function(x) {
someArray[4] = x;
}
myUpdater(5);
如果您想要读/写功能,请将其选中:
var makeBox = function(arr, n) {
return {
read: function() { return arr[n]; },
write: function(x) { arr[n] = x; }
};
}
// and then:
var ptr = makeBox(someArray, 4);
ptr.read(); // original
ptr.write(newValue);
someArray[4]; // newValue