0

虽然我意识到数组作为非原始数据类型是由 JavaScript 中的引用而不是值处理的,但该数组的任何特定元素都可能是原始数据类型,然后我假设它不是通过引用分配的.

我想知道如何获取对数组中单个元素的引用,以便在更改该元素时不必继续引用数组和索引号?

IE

var myElement=someArray[4]
myElement=5
//now someArray[4]=5

我是否误解了各种暗示但未明确声明这不是预期行为的文档?

4

2 回答 2

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!";

将更新 . 引用的对象的“foo”属性someArray[0]

于 2013-11-07T00:49:08.520 回答
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
于 2013-11-07T00:52:29.580 回答