值类型和引用类型的区别?

js的几种数据类型,如果按照“参数传递方式”分,可分为“值类型”和“引用类型”。

值类型是按值传递,引用类型是按共享传递。

值类型变量包括Number、String、Boolean、Null、Undefined,引用类型包括了Object类的所有,如Function、Array、Date等。

我们通过代码示例来比较一下值类型和引用类型的区别吧。

先来看值类型的:

// 值类型
var a = 1;
var b = a;
b = 2;
console.log(a); // 1
console.log(b); // 2

上述代码,a和b这两个变量都是“值类型”,两者分别修改赋值,相互之间没有任何影响。但是引用类型就不一样了:

// 引用类型
var a = {x: 1, y: 2};
var b = a;
b.x = 10;
b.y = 20;
console.log(a); // {x: 10, y: 20}
console.log(b); // {x: 10, y: 20}

上述代码中,a和b这两个变量都是引用类型。

var b = a这行代码被执行后,修改b的属性值,a的属性值也会跟着变。

因为,a和b指向了同一个内存地址。也就是说,a和b引用的是同一个值,所以其中一个修改了,另一个当然会变啦。

内存地址