在 JavaScript 中,数据类型可以分为两种:基本数据类型和引用数据类型。
基本数据类型包括:数值型(number)、字符串型(string)、布尔型(boolean)、空值(null)和未定义(undefined)。这些数据类型的值是简单的值类型,它们在赋值时直接复制其值,是按值访问的,也就是说,当将一个值类型赋值给一个变量时,该变量存储的是这个值本身。
引用数据类型包括:对象(object)、数组(array)、函数(function)等。引用数据类型的值是对象,存储的是对象的引用地址,这些地址是按引用访问的。当将一个引用类型的值赋给变量时,实际上是将该值的引用地址赋给了变量,而不是复制该值本身。
注意:虽然null是值类型,但是在typeof 的结果是 object
举个例子:
// 值类型
var a = 1;
var b = a;
b = 2;
console.log(a); // 输出1,a的值没有改变
console.log(b); // 输出2,b的值改变了
// 引用类型
var c = {name: 'John'};
var d = c;
d.name = 'Mike';
console.log(c.name); // 输出'Mike',c的属性值改变了
console.log(d.name); // 输出'Mike',d的属性值改变了
可以看出,当复制值类型时,变量之间是互不干扰的,而复制引用类型时,变量之间实际上是共享同一个对象的引用地址,因此它们之间的操作会互相影响。