Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更新参考变量_Javascript_Angular_Typescript_Reference - Fatal编程技术网

Javascript 更新参考变量

Javascript 更新参考变量,javascript,angular,typescript,reference,Javascript,Angular,Typescript,Reference,只是想知道如果变量是字符串,是否可以更新对象引用变量?如果我指定了整个对象,它可以工作,但不能与字符串一起工作。我也可以分配整个对象,但这里的问题是我不需要对象,但我需要字符串,因为它是Angular 2 service的全局变量 这是jsfiddle 预期结果将是- 第一个警报-“objModified” 第二个警报-“已修改” 在我的例子中,我总是得到“initial”。我想你要做的是传递对象引用 var obj = { var: 'initial' }; var a = [{ test:

只是想知道如果变量是字符串,是否可以更新对象引用变量?如果我指定了整个对象,它可以工作,但不能与字符串一起工作。我也可以分配整个对象,但这里的问题是我不需要对象,但我需要字符串,因为它是Angular 2 service的全局变量

这是jsfiddle

预期结果将是-

第一个警报-“objModified” 第二个警报-“已修改”


在我的例子中,我总是得到“initial”。

我想你要做的是传递对象引用

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);
更新小提琴:


如果传递字符串引用,比如,
test:obj.var
,因为字符串是不可变的,所以它不会改变

您编写它的方式ao对象在创建时引用了obj.var的值

创建后对该值的任何更改都不会传播到ao

如果希望它以这种方式工作,则需要使test属性引用对象,而不是直接引用值

obj={var:'initial'};
a=[{test:'old',new:'no'},{test:obj,new:'yes'}];
o={test:obj,new:'yes'};
obj.var='objModified';
警报(o.test.var);//o、 测试===obj为真
obj.var='arrModified';
警报(a[1].test.var);//a[1]。测试===obj为真

创建数组
a
和对象
o
时,属性
test
用简单字符串变量的值初始化,因此它们的值存储为“值”

如果使用对象引用对其进行初始化,如以下示例所示:

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)好的,所以如果不将引用传递给对象,就不可能更改值?@VdasDorls您可以迭代数组并手动更改它
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);
obj = { var: 'initial' };
a = [{ test: 'old', new: 'no' }, { test: obj.var, new: 'yes' }];
o = { test: obj.var, new: 'yes' };