通过引用传递JavaScript变量

通过引用传递JavaScript变量,javascript,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 然后考虑下面的代码: var p = [1,2]; var pRef = p; p.push(3); pRef === p; // true var s = "ab"; var s

我对通过引用传递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

然后考虑下面的代码:

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变量的诀窍是什么


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

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

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

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

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

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

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

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

manipulate(foo);

//foo.bar is now 'that changed'

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

“操纵字符串会导致创建字符串对象的新实例。”将新实例分配给变量会使其指向该新对象。不过,字符串变量也是如此。