javascript引用类型是怎么回事

King
  • 1.5k

为什么重新赋值了a,b的属性x也被改变了
后面对a重新赋值对象,b没有变化
好像看到过相关知识,但想不起来了

var a = {"x": 1};
var b = a;
a.x = 2;
b.x; 

a = {"x":3};
console.log(b.x);

我觉得这个问题不应该被关闭,我修改了表达文字,把它打开

回复
阅读 4.8k
5 个回答
✓ 已被采纳
var a = {"x": 1};    //对象是引用类型,这里把对象{"x": 1}的引用地址赋值给变量a
var b = a;    //把a所引用的对象地址赋值给b,此时a和b指向同一个对象
a.x = 2;    //把a所指向对象的属性x设置为2,此时该对象为{"x": 2}
b.x;     //由于a和b指向同一个对象,所以b.x = a.x = 2

a = {"x":3};    //这里重新对a进行赋值,把一个新对象{"x": 3}的引用地址赋值给变量a,此时a指向这个新对象{"x": 3},而b仍然指向原来的对象{"x": 2}
console.log(b.x);    //这里输出2就顺理成章了

整个过程就像我在注释里写的那样,最后console.log(b.x)的值为2
建议题主可以翻阅一下《Javascript高级程序设计》,我之前看的是第二版,有一章讲解了引用类型和值类型,看完应该就懂了,或者参考一下网上各路大神的博客

a = {"x":3};这句a估计是new,另寻新欢了,b还是原来的b。可以这么理解吧。

js中对象是引用类型的,记住这一点,只要寻找变量当前指向哪一个对象即可

属于数据类型中引用类型这类知识点的

你知道吗?

宣传栏