1.js的数据类型
js的数据类型有:Number String Boolean undefined null Object Symbol
1.1数据类型分类:
基本类型和引用类型
1.1.1基本类型
Number String Boolean undefined null
基本类型的数据是存放在栈中(stack),他们的值直接存放在变量可以访问的位置,这是因为他们的大小是固定的,所以可以将他们存储在较小的内存区域-栈中,这样便于迅速查找变量的值。
1.1.2引用类型
Object Array Function
引用类型对象存储在堆中,而指向变量的指针是存储在栈中,指针指向的是堆中的存储对象。引用类型的大小是不固定的,如果把引用类型也放在栈中,这样会降低变量查询速度。
1.2不同的内存分配机制带来不同的访问机制
1.2.1引用类型访问机制-引用访问
javascript中不允许直接访问保存在堆中的引用类型的对象,所以访问一个对象的时候,首先先获取这个对象存放在栈中地址,然后再根据这个地址在获取这个对象的值,这种访问叫做按需访问。
1.2.2基本类型
基本引用类型(原始数据类型)是可以直接访问的
2.深拷贝和浅拷贝
2.1定义
浅拷贝:浅拷贝是创建一个新的变量,这个变量上有着对原始变量的属性的一份精准拷贝,如果属性是基本类型,拷贝的就是基本类型的值,如果是引用类型拷贝的是内存地址,如果是其中一个对象改变了,就会影响到另一个对象。
深拷贝:深拷贝就是将对象从内存中完全拷贝一份出来,然后在内存中开辟新的区域用来存放新的对象,且修改新对象不会影响到旧的对象。
2.2浅拷贝和深拷贝的方法
2.2.1浅拷贝实现方式
1.Object.assign();
2.展开运算符...
3.Array.prototype.concat()
4.Array.prototype.slice()
2.2.2深拷贝的实现方式
1.JSON.parse(JSON.stringify())
2.jQuery.extend()方法
3.手写递归方法
参考资料: