let const var相关、js数据类型
let const var相关、js数据类型
let const var相关
var
- ES5的变量声明方式,在变量未赋值的时候,值为undefined。存在变量提升,即变量可以在声明之前调用,不过值是undefined。
- 作用域——var的作用域为方法作用域;只要在方法内定义了,整个方法内的定义变量后的代码都可以使用。
let
- ES6的变量声明方式,不存在变量提升,在变量声明前调用会报错。
- 作用域——let的作用域为块级作用域,通常let比var的作用域方位要小。
- let禁止重复声明变量,会报错;var可以重复声明。
const
- ES6的变量声明方式,声明变量时必须初始化(必须赋值,不能使用null占位),在后面出现的代码中不能再修改该常量的值。
- 作用域——块级作用域。
- const实际上保证的,并不是变量的值不得改动,而是变量指向的内存地址不得改动。(因此可以修改对象中的值)
js数据类型(八大数据类型)
基本数据类型
- Number
- String
- Boolean
- null
- undefined
- symbol(ES6新增)
- bigint(ES6新增)
引用数据类型
- object(object、array、function等)
两种数据的存储方式:
基本数据类型直接存储在栈中,占据空间小,大小固定,属于被频繁使用的数据。栈是存储基本数据类型和执行代码的空间。
引用数据类型是存储在堆内存中的,占据空间大,大小不固定。引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址,当解释器寻找引用值的时候,会检索栈中的地址,取得地址后从堆中获得实体。
两种数据类型的区别:
- 堆比栈空间大,栈比堆运行速度快。
- 堆内存是无序存储,可以根据引用地址直接获取。
- 基本数据类型比较稳定,相对来说占用内存小。
- 引用数据类型大小是动态的,而且是无限的。