- 基本类型(原始类型)
- 引用类型
基本类型
- number
- string
- boolean
- undefined
- null
- symbol(es6新增)
- bigint(es6新增)
所谓基本类型,是因为这些类型的值,无法再继续往下拆分
symbol
主要用于创建唯一的标识符,其值是唯一且不可变的,适用于作对象属性的键
const s1 = Symbol()
const s2 = Symbol()
console.log(s1 === s2) // false
bigint
表示大数,大于Number.MAX_SAFE_INTEGER(2^53 - 1) 或小于 Number.MIN_SAFE_INTEGER(-2^53 + 1) 的整数
null
表示空值
typeof null // object
null的特性
- 转为数值时,会自动转换为0
- 作为原型链的终点
undefined
表示未定义值,即未对变量进行赋值
undefined的特性
- 转为数值为NaN
- 变量声明后,未赋值,默认值为undefined
- 调用函数没有提供要求的参数,那么该参数就是undefined
- 函数没有返回值,默认返回undefined
引用类型
object
可以继续往下拆分为多个简单值或复杂值
const obj = {
a: 1,
b: 'test',
o:{
c:2
}
}
注意
typeof function(){} // function
函数是可调用的对象,为了区分普通对象和函数对象,typeof function(){} === function
两者之间本质的区别
从内存存储角度考虑
简单值,通常存储在栈内存中,栈内存的特点是管理简单且访问速度快,适用于存储大小固定,生命周期短的数据
复杂值,具体的值存储在堆内存中,堆内存的特点适合存储大小不固定,生命周期长的数据,栈区会存储一个内存地址