Open
Description
JS中原始类型有哪几种?
目前,JS原始类型有六种,分别为:
- Boolean
- String
- Number
- Undefined
- Null
- Symbol(ES6新增)
ES10新增了一种基本数据类型:BigInt
复杂数据类型只有一种: Object
null 是对象吗?
null
不是一个对象,尽管typeof null
输出的是object
,这是一个历史遗留问题,JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象,null
表示为全零,所以将它错误的判断为object
。
原始数据类型和复杂数据类型有什么区别?
基本数据类型和复杂数据类型的区别为:
1、内存的分配不同
- 基本数据类型存储在栈中。
- 复杂数据类型存储在堆中,栈中存储的变量,是指向堆中的引用地址。
2、访问机制不同
- 基本数据类型是按值访问
- 复杂数据类型按引用访问,JS不允许直接访问保存在堆内存中的对象,在访问一个对象时,首先得到的是这个对象在堆内存中的地址,然后再按照这个地址去获得这个对象中的值。
3、复制变量时不同(a=b)
- 基本数据类型:a=b;是将b中保存的原始值的副本赋值给新变量a,a和b完全独立,互不影响
- 复杂数据类型:a=b;将b保存的对象内存的引用地址赋值给了新变量a;a和b指向了同一个堆内存地址,其中一个值发生了改变,另一个也会改变。
4、参数传递的不同(实参/形参)
- 函数传参都是按值传递(栈中的存储的内容):基本数据类型,拷贝的是值;复杂数据类型,拷贝的是引用地址