-
原始类型:
Boolean Number String Null Undefined Symbol(ES6 新增)
-
复杂数据类型:
Object
-
ES10 新增了一种基本数据类型:
BigInt
-
null 是不是对象?
null 不是一个对象,尽管 typeof null ===“object”,这是一个历史遗留问题,原理是不同的对象在底层都是用二进制来表示的,在 js 中二进制前三位是 0 既判断为对象,null 的二进制表示全是 0,即前三位都是 0,所以执行 typeof(null) 的时候返回 object,实际上 null 是基本数据类型。
-
基本数据类型和复杂数据类型的区别:
内存分配不同
基本数据类型存储在栈中。复杂数据类型存储在堆中,栈中存储的地址,是指向堆中的引用地址,属性及值存储在堆中。
访问机制不同
基本数据类型是按值访问 复杂数据类型是按引用访问,JS 不允许直接访问保存在堆内存中的对象,在访问一个对象时,首先得到的是这个对象在栈内存中的地址,然后按照这个地址去获得存储在堆中的值。
赋值方式不同
基本数据类型作为参数时,修改基本数据类型的参数不影响原有数据,复杂数据类型,是通过引用地址来访问的,所以作为参数时,修改 属性后,会影响原有数据。