学习课程名称:BAT大牛带你横扫初级前端JavaScript面试(第二版)
章节名称:课程介绍(新版)
讲师姓名:双越
课程内容:
- 值类型和引用类型
- typeof和深拷贝
- 变量计算
类型基础及背后的工作原理
数据在内存中的分配及传递,值类型和引用类型在内存分配与传递上的区别
在内存分配上:首先要了解内存中栈和堆的概念
栈:先进后出,从上往下的内存结构
堆:后进先出,从下往上的内存结构
当A变量为值类型时,把A赋值给变量B,尝试改变A的值,B不会随之改变,两者互不影响(不干涉);
而A为引用类型时,尝试上述相同赋值操作,之后改变B下面属性的值,则A随之改变;
引用类型为啥就必须赋值内存地址?
主要原因:还是考虑到性能和存储的问题;值类型占有空间比较小,直接赋值上去没有问题,另外赋值上去,相互也没有影响。引用类型在实际工作中,通常都是非常大的,如果直接像值类型一样,赋值上去,首先会太大了,还有就是赋值的时候,会太慢了;所以值类型和引用类型被严格的分离出来,它们的存储机制,赋值机制,拷贝机制也都分离出来。基于内存的空间和CPU计算的耗时来去做的区分,并不是故意为难,不得已而为之。
typeof运算符
可以识别所有值类型
- String类型
- Number类型
- Boolean类型
- Null类型
- Undefined类型
- Symbol类型
识别出函数
判断是否是引用类型(不可再细分)
深拷贝和浅拷贝
浅拷贝 :只复制指向某个对象的指针,而不复制对象本身,相当于是新建了一个对象,该对象复制了原对象的指针,新旧对象还是共用一个内存块
深拷贝:是新建一个一模一样的对象,该对象与原对象不共享内存,修改新对象也不会影响原对象