一个变量是否有可能指向像这样的数组中的另一个变量,
var theArray = [0,1,2,3];
var secondElement = //somehow point to theArray[1]
因此,如果我修改theArray[1]
,secondElement
也应该被修改,反之亦然(可能不使用函数)?
答案 0 :(得分:3)
没有办法直接这样做。该数组可以是一个对象数组,您可以直接修改对象的属性而不是数组条目。然后你会:
var theArray = [ { value: 0 }, { value: 1 }, { value: 2 }, { value: 3 } ];
var secondElement = theArray[1];
然后theArray[1].value
中也会显示对secondElement.value
的更改。
我会提供观察,即功能是友好的东西,如果你不试图通过尾巴捡起它们,它们不会伤到你。
答案 1 :(得分:3)
您可以使用对象属性并使用对象包装数组:
var a = {arr: [1,2,3,4]};
var b = a;
b.arr[0] = 777;
console.log(a.arr);
此方法的优势在于您还可以为a.arr
和b.arr
分配新值。
var a = {arr: [1,2,3,4]};
var b = a;
a.arr = [777,888];
console.log(b.arr);
答案 2 :(得分:2)
你问的是引用 - 对于原始值,它在Javascript中不是直接可能的。有可能w / r / t对象:
C:\WINDOWS>jsdb
js>a = []
js>b = {refToA: a}
[object Object]
js>b.refToA.push(3)
1
js>a
3
js>a.push(4)
2
js>b.refToA
3,4
js>
在上面的示例中,对象b
具有包含对象a
的属性refToA;两者都引用相同的实际对象,因此对象b.refToA
和a
的更改通过两种方式进行反映。如果您重新分配b.refToA
或a
,此引用将被破坏。与数组类似:
js>x = {y: 3, toString: function() { return 'y='+this.y; }}
y=3
js>a = [x]
y=3
js>b = [3,x]
3,y=3
js>a[0].y = 22
22
js>b
3,y=22
js>b[1].y = 45
45
js>a
y=45
a[0]
和b[1]
都有一个与对象相同的引用值。
只有当共享对象是一个可变容器时才能实现您正在寻找的效果,以便您的两个所需变量具有(并且始终具有)相同的值,这是对共享可变容器的引用。您可以更改容器中的值,并且可以通过两种访问方式查看它们。原始值(例如数字和字符串)不是可变容器,因此不能以这种方式使用它们。