1.基本数据类型
1.1基本数据类型的种类
在js中一共有六中基本数据类型,分别是
- String 字符串
- Number 数值
- Boolean 布尔值
- Null 空值
- Undefined 未定义
- Object 对象
其中String Number Boolean Null Number属于基本数据类型。
1.2基本数据类型的特点
- 基本数据类型在赋值时是将值本身传递给变量
let num1 = 1;
let num2 = num1;
num2 = 2; //改变num2时不会改变num1
console.log(num1); //1
console.log(num2); //2
- 基本数据类型的值保存在栈中
2.引用数据类型
2.1引用数据类型的种类
在js中,除5种基本数据类型外,其余的都属于引用数据类型Object
2.2引用数据类型的特点
- 引用数据类型在赋值时传递的是保存对象数据内存的地址。
let a = [1, 2, 3];
let b = a;
b[0] = 4;
console.log(a); //[4,2,3]
console.log(b); //[4,2,3]
这里a的值也会被改变就是因为a和b保存的都是数组[1,2,3]在内存中的地址,所以更改b的值就是在更改b指向的数组对象的值,因为a和b指向同一块内存,所以改变b的值时a的值就会被改变。
let c = [];
let d = [];
console.log(c == d); //false
这里c和d虽然都是空数组,但是输出c == d 的值却为false
这就很好的解释了引用型数据类型在赋值时传递的是指向对象数据的地址,所以c中存储的是空数组 [] 的地址,d中存储的是另一个空数组 [] 在内存中的地址,所以c和d的值不同。
深拷贝和浅拷贝
深拷贝和浅拷贝只是针对Object和Array这样的引用数据类型的
- 浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存,改变是会改变原对象
- 深拷贝会另外创造一个一模一样的新对象,新对象不跟原对象共享内存,修改新对象不会改原对象。