javascript的引用赋值。

问题

最近写了一段代码,出错了。简化一下,是下面这样的逻辑:

var a={}
a['a']=1
for(var i=0; i<5;i++){
	var b=a;
	b['b']=i;
	console.log(b)
}
console.log(a)

请问最终输出的a是什么?

{a: 1, b: 4}

console下执行一下,输出结果如上。

为啥a的内容被改了?

原因

查阅网络上的资料,是因此javascript的赋值分为值赋值和引用赋值。 对于Object和数组,采用的是引用赋值,即b和a指向同一个地址,对b的修改,也会导致a的修改。 这就是为什么我们在循环里面操作b的值,导致a的值也被修改了。

其他

在看文档时,发现const也是可以被修改的。

The const declaration declares block-scoped local variables. The value of a constant can't be changed through reassignment using the assignment operator, but if a constant is an object, its properties can be added, updated, or removed.

之前以为const是常量,不能修改。但其实如稳定所说,如果是object,属性还是可以被修改的。

const a = {'a':1};
console.log(a);
a['b']=2
console.log(a)
var b=a
b['c']='c'
console.log(b,a)

> Object { a: 1 }
> Object { a: 1, b: 2 }
> Object { a: 1, b: 2, c: "c" } Object { a: 1, b: 2, c: "c" }

https://www.cnblogs.com/cench/p/6019453.html https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const https://javascript.info/object-copy