我对通过引用传递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变量的诀窍是什么?
是否存在创建字符串引用的方法?
答案 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中的对象。