虽然我意识到数组作为非原始数据类型是由 JavaScript 中的引用而不是值处理的,但该数组的任何特定元素都可能是原始数据类型,然后我假设它不是通过引用分配的.
我想知道如何获取对数组中单个元素的引用,以便在更改该元素时不必继续引用数组和索引号?
IE
var myElement=someArray[4]
myElement=5
//now someArray[4]=5
我是否误解了各种暗示但未明确声明这不是预期行为的文档?
虽然我意识到数组作为非原始数据类型是由 JavaScript 中的引用而不是值处理的,但该数组的任何特定元素都可能是原始数据类型,然后我假设它不是通过引用分配的.
我想知道如何获取对数组中单个元素的引用,以便在更改该元素时不必继续引用数组和索引号?
IE
var myElement=someArray[4]
myElement=5
//now someArray[4]=5
我是否误解了各种暗示但未明确声明这不是预期行为的文档?
您可以制作数组元素的副本,但不能创建用作数组属性引用的别名的值。对象属性也是如此;当然,数组元素引用是对象属性引用。
您可以得到的最接近的方法是创建一个带有 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!";
将更新 . 引用的对象的“foo”属性someArray[0]
。
你总是可以传递一个闭包来更新它:
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