获取对数组元素的引用

时间:2013-11-07 00:48:13

标签: javascript

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

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

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

我是否误解了隐含的各种docs,但没有明确说明这不是预期的行为?

2 个答案:

答案 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