##数据类型分类
- 基本数据类型:
string,boolean, number,Symbol,undefined, null - 引用数据类型:
object - 基本数据类型中undefined,null为特殊
- 内置对象:
Date,Array,Math,Number,Boolean,String,Regexp,function...##数据类型访问与复制 - 基本数据类型值保存在栈内存中的简单数据段;访问方式是按值访问
- 引用数据类型保存在堆内存中的对象。(变量中保存的是一个内存指针,这个指针指向内存中另一个位置,这个位置存放对象)访问方式是按引用访问。操作时,按照指针读取内存,然后再对该内存中的值进行操作。
- 重点:引用值的复制,是复制指针,所以为了防止污染,采用深拷贝可以
JSON.parse(JSON.stringify(objects))##堆、栈 - 二者都是存放临时数据的地方
- 栈,先进后出(桶)
- 堆,程序运行时,而不是程序编译是,申请某个大小的内存空间(动态分配内存),随意增删属性,无次序;
- 栈区(stack),由编辑器自动分配释放,存放函数的参数值和局部变量;
- 堆区(heap),一般由程序员分配释放,不主动释放,由垃圾回收机制处理;
- 堆(数据结构),一棵树,堆排序;
- 栈(数据结构),先进后出的数据结构; ##数据类型检测
- 基本数据类型判断利器(typeof)
- 引用数据类型检测(instanceof),原理:查看B对象的prototype执行的对象是否在对象A的[[prototype]]链上,当B为null时,会报错(空指针)
- Constructor 判断自定义类型(不适应null和undefined)
{name: 'jazz'}.constructor == Object // true
- 推荐使用:Object.prototype.toString.call(obj) ##数据类型转换
- 隐式转换 1:undefined 和 null 相等,但不恒等 2.number 和 string 对比时,会尝试将string转换成number; **
- 显示转换 Number(),String(),Boolean()三个方法