js引用类型和值类型

第一个引用传递,所以会互相影响。第二个类型不也是引用类型吗,但为什么是值传递呢?
   
var obj1 = {name: 'kenny'};
    var obj2 = obj1;
    obj1.name = 'kongyun';
    obj2.name // 'kongyun'
var a = {a:1, b:2};
var b=a;
a={a:3,b:4};    
console.log(a);//{a:3,b:4};    
console.log(b);{a:1, b:2}
阅读 3.5k
5 个回答

第一个,数据类型存储访问,希望有助。
第二个,

var a = {a:1, b:2};
var b=a;

a === b  //true  指向同一地址
a={a:3,b:4};  //这里是字面量方式,相当于new Object()
a === b  //false , 说明已经不是指向同一地址,所以结果不同

javascript里的所有传递都是值传递, 对于Object的类型你可以理解成指针, 这个变量只存储了Object的内存地址.

当一个变量向另一个变量复制引用类型的值时,会将存储在栈中的值(栈中存放的值是对应堆中的引用地址)复制一份到为新变量分配的空间中。

不同的是,这个值的副本其实是一个指针,而这个指针指向存储在堆中的一个对象。复制操作结束后,两个变量实际上引用同一个对象。

a={a:3,b:4}; 

这行代码的意思就是a另起灶炉了,跟以前那个var a = {a:1, b:2};毫无瓜葛了

var b=a;a和b都指向 {a:1, b:2};内存地址。
a={a:3,b:4}; a指向了{a:3,b:4};内存地址,而b还是指向{a:1, b:2};
所以两个结果不同!

a={a:3,b:4}; 

是指 a = new Object({a:3,b:4});
是新创建了一个对象,跟上面的var a = {a:1, b:2};不是一个啦

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏