原始值与引用值
在Javascript中,变量有两种类型,分别为原始值与引用值。
原始值就是基本的数据类型。例如:Number String Boolean Undefined Null
引用值可以解释为引用对象的类型。例如:Array Object Function Data RegExp等等
二者的赋值情况
原始值是将数据存储在栈里面,以“值”本身的方式进行赋值。
就以下举例,开辟一个空间命名为a,赋值为10,再开辟一个空间命名为b,将a中的值拷贝进b中,最后将20覆盖a中原本的10,最后在控制台输出b的值,b仍为10。
var a = 10;
var b = a;
a = 20;
console.log(b);
引用值是将数据存储在堆里面,以“引用”的方式进行赋值。
就以下举例,现在栈里面开辟一个空间命名为arr1,接着在堆里面放入[1,2],栈里面arr1的空间则存放数据在堆里面的地址,再在栈里面开辟一个空间命名为arr2,将arr1数据在堆里面的地址给拷贝过来,现在往arr1中push一个3,输出的arr2仍然是[1,2,3]。
var arr1 = [1,2];
var arr2 = arr1;
arr1.push(3);
console.log(arr2);
举例
var arr1 = [1,2];
var arr2 = arr1;
arr1 = [1,2,3];
console.log(arr1);
console.log(arr2);
最后输出结果arr1为[1,2,3],arr2为[1,2]。
因为第三行使用的是原始值,重新在堆里面开辟一个空间存放[1,2,3],栈里面arr1存放堆的地址也随之改变,但栈里面arr2存放的仍然是以前[1,2]的地址。