像'push'和'splice'这样的方法可以改变ECMAScript中的对象引用吗?

时间:2011-08-25 09:00:04

标签: javascript object

我想知道这段代码是否总能按预期运行:

var a = [0, 1];
var b = a;
b.push(2);
// a is now [0, 1, 2]

理论上,像'push'或'splice'这样的方法可以改变变量的引用(例如,如果前一个对象位置没有足够的内存)?换句话说,在我的例子中,它可以是!= b吗?

2 个答案:

答案 0 :(得分:3)

只要您执行b = a,两个变量都始终引用相同的Array / Object

如果您正在执行b = a.slice( 0 );之类的操作,则会创建一个新的,独立的Array

答案 1 :(得分:1)

不,您在对象上调用的方法无法更改对象的引用。

对于能够更改引用的方法,您必须将用于引用对象的变量发送到方法中。如果没有这个,方法只知道对象,它不知道你用来存储引用的变量,所以如果它改变了对象的引用,你的变量将不再指向它。