今天碰到了一个引用赋址的问题
var a = [1,2];
var b = a;
b[0] = 3;
alert(a) //3,2
这时候改变变量b,a的值跟着也变了,这是因为js的数组和对象、函数都是通过引用来赋值的;number和字符串是按照普通的方式赋值。
解决方法
1. var a = [1,2];
var b = a.slice(0);
b[0] = 3;
alert(a) //1,2
2. var a = [1,2];
var b = a.concat(0);
对象中
var a={age:22};
var b=a;
alert(b.age); //这是22
b.age=23;
alert(a.age); //但这是23
基本类型访问的是栈,引用类型访问的是堆,引用类型的地址也在栈内。
本文探讨了JavaScript中引用类型赋值的特点及由此产生的问题,包括数组和对象赋值后的引用变化现象,并提供了两种有效避免该问题的方法。
343

被折叠的 条评论
为什么被折叠?



