首页 > 如何理解下面一段js代码?

如何理解下面一段js代码?

    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


对象的赋值属于引用类型,


除了基本类型, 其他对象都是引用方式赋值包括数组和函数

【热门文章】
【热门文章】