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 同时变化 第二次却互不影响呢,求大神解答
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 同时变化 第二次却互不影响呢,求大神解答
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'
您可以点击这里多了解一下内存空间的相关知识
希望我的回答能帮助到您^_^
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答857 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
字符串是基本类型
对象是引用类型
基本类型复制的是值
引用类型复制的是引用地址