js 对象深度拷贝问题

1.js 对象和字符串深度拷贝问题
2.
var a = b = [];
a.push('1');
console.log(a,b); //[1],[1];
var a = b = 'hello';
a+= ' world';
console.log(a,b); //'hello world','hello';
为什么第一次 a和b 同时变化 第二次却互不影响呢,求大神解答

阅读 3.2k
4 个回答

字符串是基本类型
对象是引用类型
基本类型复制的是值
引用类型复制的是引用地址

js的对象和字符串是不一样的。对象是存在于堆空间,第一次的a和b相当于是引用这个堆空间,所以改变a也就是改变了堆空间的内容,自然b也跟着发生改变。而js的基本类型比如Number,string,boolean这些的,都是直接放在栈内存中,声明一个a就会有对应的一个a的值,也就是说第二个的a和b是完全两个东西没有一点联系,仅仅是第一次把b的值赋值给a了。所以a改变不会影响b

有个类似的问题请参考我的回答

var a = b = [];
这段代码其实是这样的:

var b = [];//b中存的只是该数组的地址引用(或者地址指针)
var a = b;//将b的指针赋给a,此时a和b访问的是堆内存中的同一个数据

var a = b = 'hello';
而字符串不存在指针的问题:

var b = 'hello';//b中存的就是'hello'这个值
var a = b;//将b的值赋给a,此时a和b的值都为'hello'

您可以点击这里多了解一下内存空间的相关知识

希望我的回答能帮助到您^_^

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