Javascript 为什么修改数组中的某些内容不会改变数组外的同一对象?

Javascript 为什么修改数组中的某些内容不会改变数组外的同一对象?,javascript,arrays,oop,reference,Javascript,Arrays,Oop,Reference,比如我有这样的东西: var foo = "foo"; var arr = []; arr[0] = foo arr[0] += " bar"; console.log(foo); console.log(arr[0]); 为什么是输出 >>"foo" >>"foo bar" 而不是 >>"foo bar" >>"foo bar" ?字符串是不可变的,这意味着它们一旦定义就永远不会更改。它们本质上也是“按值传递”,这意味着您在将原语分配给对象

比如我有这样的东西:

var foo = "foo";
var arr = [];
arr[0] = foo
arr[0] += " bar";
console.log(foo);
console.log(arr[0]);
为什么是输出

>>"foo"
>>"foo bar"
而不是

>>"foo bar"
>>"foo bar"

字符串是不可变的,这意味着它们一旦定义就永远不会更改。它们本质上也是“按值传递”,这意味着您在将原语分配给对象时正在复制。您在第一次输出中调用的是字符串,而不是数组中的foo。实际更改的唯一值是数组中的值。您有两个变量:foo arr如果更改arr,foo保持不变。如果您更改foo,那么arr也会更改。@dandavis如果它是一个变量,它现在将包含一个具体的字符串:
var a=“foo”;a+=“巴”a;“foo bar”
是重新分配和执行
foo=arr[0]的唯一方法?
解决方法是在分配中使用名称、点和属性,而不仅仅是名称。