数据类型
JavaScript 中的值,无论是字面量还是变量,都有明确的类型。
JavaScript 中的数据类型,分为两大类,原始类型(简单数据类型)和 复杂(引用)类型。
基本数据类型又叫做 值类型,复杂类型又叫做 引用类型。
基本类型
Number数字类型String字符串类型undefinedundefined 类型Boolean布尔类型nullnull类型symbol(待补充)
复杂类型
Object数组、对象、函数...
值类型:简单数据类型、基本数据类型,在存储的时候是值本身,所以叫做值类型。
引用类型:复杂数据类型,在存储的时候,变量中存储的是地址(引用),因此叫做引用数据类型。
基本类型在内存中的存储
变量中如果存储的是简单类型的数据,那么变量中国存储的是值本身,如果将变量赋值给另一个变量,是将内部的值赋值了一份给另一个变量,两变量之间没有关系,一个变化,另一个不会同时变化。
如下图:
示例:
var a = 2;
var b = a;
a = 3;
console.log("a:" + a); // 3
console.log("b:" + b); // 2
复杂类型在内存中的存储
如果将复杂数据类型的数据赋值给一个变量,复杂数据类型的数据会在 堆内存 中创建一个原型,而变量在 栈内存 中存储的是指向对象原型的地址(指针),如果将这个变量A赋值给另一个变量B,相当于A将地址复制了一份给另一个变量B,两个变量的地址相同,指向的是同一个原型,不论通过哪个变量更改了原型,都是在原型上发生了更改,所以更改的值原型,这些变量再次访问时都会发生改变。
如下图:
示例:
// 复杂数据类型在内存中的存储
// 对象
var per = {
name: "lili",
age: 18,
sex: "女"
};
var per2 = per; // per将指向对象原型的地址复制了一份给per2
per2.name = "Lisa";
console.log(per); // {name: "Lisa", age: 18, sex: "女"}
console.log(per2); // {name: "Lisa", age: 18, sex: "女"}
// 数组
var arr = [1,2,3,4];
var arr2 = arr; // 同理,对象存储的是指向原型的地址
arr2[4] = 5;
console.log(arr); // [1, 2, 3, 4, 5]
console.log(arr2); // [1, 2, 3, 4, 5]