一、数据类型
基本数据类型
基本类型存储的值
- Boolean (布尔类型)
- Undefined (为定义)
- Number (数字类型)
- Null (空)
- String (字符串类型)
- Symbol (符号类型)
对象类型/引用类型
对象在逻辑上是属性的无序集合,是存放各种值的容器。对象值存储的是引用地址,所以和基本类型值不可变的特性不同,对象值是可变的。
- Object
- Function
- Array
例:
var foo = 1;
var bar = 2;
var obj = {foo: 1, bar: 2}
这里声明的三个属性,基本类型存储在栈中,引用类型存在堆中,我们常用的var、let和const实际上是指针关系,指向栈和堆中的数据集
但是const指向最外层的指针(例:0x0203),切不允许修改指针的指向关系,所以object可以修改内部的属性值,但是不能修改最外层的对象(会导致修改指向关系),其他基本数据本身就一层数据接口,所以更加不可修改
二、深拷贝和浅拷贝
1.浅拷贝
浅拷贝是将对象第一层的每个属性进行依次复制,但是当对象的属性是引用类型时,实质复制的是其引用,当引用对象指向的值改变时也会跟着变化
2.深拷贝
深拷贝复制变量值,对于非基本类型的变量,则递归至基本类型的变量后,再复制。深拷贝的对象与原来的对象是完全隔离的,互不影响,对一个对象的修改并不会影响另一个对象。
实际执行:
v