通过引用传递JavaScript变量

3

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

4

操作字符串会创建一个新的字符串对象实例。将项推入数组不会创建一个新的数组实例,而只是向其添加一个项。


2
操作字符串会导致创建一个新的字符串对象实例。将新实例分配给变量会使其指向该新对象。 - Thilo

2

这两个例子并不做相同的事情。在第一个案例中,您从未重新分配 p,而只是调用其中的方法来修改数组中的值。而在第二种情况下,在设置了 sRef 后,您重新分配了 s,因此它们不再等价。


0

在 JavaScript 中,字符串是不可变的。


0

p并不代表[1,2],而是一个指针,指向存储在内存中的[1,2]。 因此,如果您更改p或pRef,存储该数组的内存位置将不会改变,只有其值会改变。


同样的话也适用于字符串变量。 - Thilo

0

对象是通过引用传递的。如果您想让一个函数通过引用来操作一个字符串,您可以将该字符串作为对象传递。

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

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

manipulate(foo);

//foo.bar is now 'that changed'

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接