通过引用传递JavaScript变量
我对通过引用传递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
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中的对象。“操纵字符串会导致创建字符串对象的新实例。”将新实例分配给变量会使其指向该新对象。不过,字符串变量也是如此。