var a = {"x": 1};
var b = a;
console.log(b.x);
a.x = 2;
console.log(b.x);
a = {"x":3};
console.log(b.x);
a.x = 4;
console.log(b.x);
为什么输出的是
1
2
2
2
var a = {"x": 1}; //a: object#1 {"x": 1}
var b = a; //b: object#1 {"x": 1}
console.log(b.x); //1
a.x = 2; //a, b: object#1 {"x": 2}
console.log(b.x); //2
a = {"x": 3}; //a: object#2 {"x": 3}
console.log(b.x); //2
a.x = 4; //a: object#2 {"x": 4}
console.log(b.x); //2
对于js的object,b=a这样实际上是传了个引用
所以a.x变了之后,b.x被影响了。
再然后a = {"x": 3}使a变成了一个新的object
所以它的改变就和b无关了。
就像是这样:
a = {"x": 3};
var b = a;
b === a;
a = {"x": 3};
b === a;
两次b === a的结果分别是true和false
如果你想要知道如何把a的值赋给b,然后让a的改变与b无关,代码还能够不猥琐(比如上面这种做法...)
可以参考这个->http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object
对象的赋值属于引用类型,
除了基本类型, 其他对象都是引用方式赋值包括数组和函数