只是想知道如果变量是字符串,是否可以更新对象引用变量?它可以工作,如果我分配整个对象,但不能使用字符串。我也可以分配整个对象,但问题是我不需要一个对象,但我需要一个字符串,因为它是Angular 2服务的全局变量。
https://jsfiddle.net/009kqqrt/
obj = { var: 'initial' };
a = [{ test: 'old', new: 'no' }, { test: obj.var, new: 'yes' }];
o = { test: obj.var, new: 'yes' };
obj.var = 'objModified';
alert(o.test); // Changes correctly
obj.var = 'arrModified';
alert(a[1].test);
这是jsfiddle。
预期结果将是 -
第一次提醒 - ' objModified' 第二次提醒 - ' arrModified'
在我的情况下,我总是得到初始的'。
答案 0 :(得分:0)
我认为您要做的是传递对象引用
var obj = { var: 'initial' };
var a = [{ test: 'old', new: 'no' }, { test: obj, new: 'yes' }];
var o = { test: obj, new: 'yes' };
obj.var = 'objModified';
alert(o.test.var); // Changes correctly
obj.var = 'arrModified';
alert(o.test.var);
更新了小提琴:https://jsfiddle.net/echonax/009kqqrt/2/
如果传递字符串引用,如test: obj.var
,因为字符串是不可变的,它不会改变。
答案 1 :(得分:0)
您编写 a 和 o 对象的方式在创建它们时引用 obj.var 的值。
创建该值后对该值的任何更改都不会传播到 a 和 o 。
如果您希望以这种方式工作,则需要将 test 属性引用为对象,而不是直接引用该值。
obj = { var: 'initial' };
a = [{ test: 'old', new: 'no' }, { test: obj, new: 'yes' }];
o = { test: obj, new: 'yes' };
obj.var = 'objModified';
alert(o.test.var); // o.test=== obj is true
obj.var = 'arrModified';
alert(a[1].test.var); // a[1].test=== obj is true
答案 2 :(得分:0)
当您创建数组a
和对象o
时,属性test
将使用简单字符串变量的值进行初始化,因此将其值存储为" as值"
obj = { var: 'initial' };
a = [{ test: 'old', new: 'no' }, { test: obj.var, new: 'yes' }];
o = { test: obj.var, new: 'yes' };
如果使用对象引用初始化它,如下例所示:
var obj = { var: 'initial' };
a = [{ test: 'old', new: 'no' }, { test: obj, new: 'yes' }];
o = { test: obj, new: 'yes' };
obj.var = 'objModified';
console.log(o.test.var);
obj.var = 'arrModified';
console.log(a[1].test.var);

您可以看到修改引用对象时会修改它们的值,因为它们的值是通过引用存储的。
我希望很清楚,再见。