我希望能够对同一个原始值有两个引用,并且通过一个进行的任何更改都应该反映到另一个“神奇地” - 即使用C代码作为示例:
// (C code):
int value = 0;
int *p1 = &value;
...
int *p2 = &value;
*p2 = 1;
...
printf("%d", *p1); // gives 1, not 0
到目前为止我唯一想到的方法是使用额外的对象间接:
var a = { valueWrapper: { num: 1, str: 'initial' } };
var b = a;
// change a
a.valueWrapper.num = 2;
a.valueWrapper.str = 'changed';
// show b
console.log(b.valueWrapper.num);
console.log(b.valueWrapper.str);
// outputs:
//
// $ node test.js
// 2
// changed
有更清洁的方式吗?
答案 0 :(得分:2)
在Javascript中,原始类型(如整数和字符串)按值传递。没有内置方法来改变它。
如果不是设计的话,你可以摆脱“valueWrapper”:
var a = {num : 1, str : "initial"};
var b = a;
a.num = 2;
console.log(b.num); // display 2
答案 1 :(得分:0)
只有一种情况 - 参数和函数参数对象 - 即使值是基本类型,它们也会神奇地相互改变(这在严格模式下不起作用)。
function magicLink(a,b) {
arguments[0] = 5;
arguments[1] = 10;
console.log([a,b]);
}
magicLink(1); // [5, undefined]
这仅适用于调用期间设置的参数。