Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取对数组元素的引用_Javascript - Fatal编程技术网

Javascript 获取对数组元素的引用

Javascript 获取对数组元素的引用,javascript,Javascript,虽然我意识到数组作为非基本数据类型是由JavaScript中的引用处理的,而不是由值处理的,但该数组的任何特定元素都可以是基本数据类型,我假设它不是由引用分配的 我想知道如何获取对数组中单个元素的引用,以便在更改该元素时不必一直引用数组和索引号 i、 e 我是否误解了暗示但未明确声明这不是预期行为的各种行为?您可以复制数组元素,但不能创建用作数组属性引用别名的值。对象属性也是如此;当然,数组元素引用是对象属性引用 最接近的方法是使用setter创建一个对象,setter使用代码更新数组。这看起来

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

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

i、 e

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

您可以复制数组元素,但不能创建用作数组属性引用别名的值。对象属性也是如此;当然,数组元素引用是对象属性引用

最接近的方法是使用setter创建一个对象,setter使用代码更新数组。这看起来像:

 var someArray = [ ... whatever ... ];

 var obj = {
   set element5(value) {
     someArray[5] = value;
   }
 };
然后:

将更新
someArray[5]
。与
someArray[5]=20相比,这显然不是一个真正的改进

编辑-现在,请注意,如果您的数组元素是一个对象,那么复制该元素意味着复制对该对象的引用。因此:

var someArray = [ { foo: "hello world" } ];

var ref = someArray[0];
然后:

将更新由
someArray[0]

引用的对象的“foo”属性。您可以创建数组元素的副本,但不能创建用作数组属性引用别名的值。对象属性也是如此;当然,数组元素引用是对象属性引用

最接近的方法是使用setter创建一个对象,setter使用代码更新数组。这看起来像:

 var someArray = [ ... whatever ... ];

 var obj = {
   set element5(value) {
     someArray[5] = value;
   }
 };
然后:

将更新
someArray[5]
。与
someArray[5]=20相比,这显然不是一个真正的改进

编辑-现在,请注意,如果您的数组元素是一个对象,那么复制该元素意味着复制对该对象的引用。因此:

var someArray = [ { foo: "hello world" } ];

var ref = someArray[0];
然后:

将更新由
someArray[0]

引用的对象的“foo”属性。您可以创建数组元素的副本,但不能创建用作数组属性引用别名的值。对象属性也是如此;当然,数组元素引用是对象属性引用

最接近的方法是使用setter创建一个对象,setter使用代码更新数组。这看起来像:

 var someArray = [ ... whatever ... ];

 var obj = {
   set element5(value) {
     someArray[5] = value;
   }
 };
然后:

将更新
someArray[5]
。与
someArray[5]=20相比,这显然不是一个真正的改进

编辑-现在,请注意,如果您的数组元素是一个对象,那么复制该元素意味着复制对该对象的引用。因此:

var someArray = [ { foo: "hello world" } ];

var ref = someArray[0];
然后:

将更新由
someArray[0]

引用的对象的“foo”属性。您可以创建数组元素的副本,但不能创建用作数组属性引用别名的值。对象属性也是如此;当然,数组元素引用是对象属性引用

最接近的方法是使用setter创建一个对象,setter使用代码更新数组。这看起来像:

 var someArray = [ ... whatever ... ];

 var obj = {
   set element5(value) {
     someArray[5] = value;
   }
 };
然后:

将更新
someArray[5]
。与
someArray[5]=20相比,这显然不是一个真正的改进

编辑-现在,请注意,如果您的数组元素是一个对象,那么复制该元素意味着复制对该对象的引用。因此:

var someArray = [ { foo: "hello world" } ];

var ref = someArray[0];
然后:


将更新由
someArray[0]

引用的对象的“foo”属性。您始终可以传递一个闭包来更新此属性:

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

您始终可以传递一个闭包来更新此闭包:

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

您始终可以传递一个闭包来更新此闭包:

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

您始终可以传递一个闭包来更新此闭包:

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

因此,每当我想更改数组的元素时,我必须使用索引语法完整、显式地访问该元素。例如,如果您想执行
someArray[4].prop=4;someArray[4].foo=6
etc,您必须每次索引到数组中,如果您连续执行许多操作,程序必须每次查找索引如果数组元素是一个对象,那么复制它将为您省去这一麻烦。我将扩展答案。由于您试图在
someArray[4]
上设置属性,因此这似乎是一个非原语。在这种情况下,您可以保存对
someArray[4]
的引用并使用它。但就保存对原语的引用而言,如果没有像上述答案那样的某种形式的装箱,就无法做到这一点。因此,每当我想更改数组的元素时,我必须使用索引语法完整、显式地访问该元素。例如,如果您想执行
someArray[4].prop=4;someArray[4].foo=6
etc,您必须每次索引到数组中,如果您连续执行许多操作,程序必须每次查找索引如果数组元素是一个对象,那么复制它将为您省去这一麻烦。我将扩展答案。由于您试图在
someArray[4]
上设置属性,因此这似乎是一个非原语。在这种情况下,您可以保存对
someArray[4]
的引用并使用它。但就保存对原语的引用而言,如果没有像上述答案那样的某种形式的装箱,就无法做到这一点。因此,每当我想更改数组的元素时,我必须使用索引语法完整、显式地访问该元素。例如,如果您想执行
someArray[4].pro,这似乎是浪费