我对通过引用传递 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变量?
有没有一种方法可以创建指向字符串的引用?
我对通过引用传递 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变量?
有没有一种方法可以创建指向字符串的引用?
操作字符串会创建一个新的字符串对象实例。将项推入数组不会创建一个新的数组实例,而只是向其添加一个项。
这两个例子并不做相同的事情。在第一个案例中,您从未重新分配 p
,而只是调用其中的方法来修改数组中的值。而在第二种情况下,在设置了 sRef
后,您重新分配了 s
,因此它们不再等价。
在 JavaScript 中,字符串是不可变的。
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'
所以所有的对象都是通过引用传递的。在 JavaScript 中,数组是对象。