JavaScript中的值类型和引用类型
先抛出一个题目,阿里的笔试面试题(很基础,但确实是阿里的笔试题)
var a = {"x": 1};
var b = a;
a.x = 2;
a = {"x": 3};
console.log(b.x);
大家觉得最后在控制台输出的结果是多少?
如果你答案是2,那你就没必要接下去看了。如果不是。那你就接着看下去来解决你的疑惑吧!
JavaScript中的值类型和引用类型
在javascript里面有两种变量类型,一种是值类型,一种是引用类型。
值类型:数值、布尔型、null、undefined
引用类型:数组、对象、函数
值类型的变量的交换就就是普通的交换。比如:var a = 1; var b = a; a = 2;console.log(b);//结果是1。b不会因为a改变而改变
引用类型和值类型就不一样了。比如:var a = [1,2];var b = a;//这时候将a赋值b跟上面的值类型的赋值就不一样 。这里可以用指针来理解,声明的a变量其实就可以把他当作一个指向数组[1,2]的指针。
更形象点,可以这样理解:将[1,2]比作宝藏,a就是藏宝图。可以根据a找到[1,2]这个数组。其中 var b = a;就相当于复制了一个藏宝图给b,b就也可以找到[1,2]数组。明白了这个就好理解下面的东西了。
如果a[0] = 3;那么console.log(b)就会输出[3,2]。因为a[0] = 3直接改变可宝藏里面的东西。所有b得到的数组也发生了变化。