一个变量是否可以指向另一个变量?

时间:2011-01-20 14:33:18

标签: javascript arrays

一个变量是否有可能指向像这样的数组中的另一个变量,

var theArray = [0,1,2,3];
var secondElement = //somehow point to theArray[1]

因此,如果我修改theArray[1]secondElement也应该被修改,反之亦然(可能不使用函数)?

3 个答案:

答案 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.arrb.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.refToAa的更改通过两种方式进行反映。如果您重新分配b.refToAa,此引用将被破坏。与数组类似:

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]都有一个与对象相同的引用值。

只有当共享对象是一个可变容器时才能实现您正在寻找的效果,以便您的两个所需变量具有(并且始终具有)相同的值,这是对共享可变容器的引用。您可以更改容器中的值,并且可以通过两种访问方式查看它们。原始值(例如数字和字符串)不是可变容器,因此不能以这种方式使用它们。

相关问题