通过引用传递JavaScript变量

时间:2011-12-09 08:31:43

标签: javascript

我对通过引用传递JavaScript变量感到有点困惑。

采取以下代码:

var p = [1,2];
var pRef = p;
p.push(3);
pRef === p; // true

然后考虑以下代码:

var s = "ab";
var sRef = s;
s = s + "c";
sRef === s; // false

通过引用传递JavaScript变量的诀窍是什么?

是否存在创建字符串引用的方法?

5 个答案:

答案 0 :(得分:4)

操作字符串会导致创建字符串对象的新实例。在数组中推送项目不会创建数组的新实例,而只会向其添加项目。

答案 1 :(得分:2)

这两个例子没有做同样的事情。在第一种情况下,您永远不会重新分配p,只需调用其上的方法来修改数组中的值。在第二种情况下,您在设置s后重新分配了sRef,因此它们不再等效。

答案 2 :(得分:0)

字符串在javascript中是不可变的。

答案 3 :(得分:0)

p不表示[1,2],而是指向[1,2]保存在内存中的指针。 因此,如果更改p或pRef,此数组在内存中保存的位置将不会仅更改其值。

答案 4 :(得分:0)

对象通过引用传递。如果希望函数通过引用操作字符串,则可以在对象上传递该字符串

function manipulate(obj) {
    obj.bar += ' changed';
}

var foo = {
   bar: 'that';
};

manipulate(foo);

//foo.bar is now 'that changed'

所以所有对象都通过引用传递。数组是js中的对象。