JS语言类型
JavaScript是动态语言以及弱类型语言
- 静态类型与动态类型
- 静态语言:在使用前需要确认其变量数据类型
- 动态语言:在运行过程中需要检查数据类型
- 强类型与弱类型
- 强类型:不支持隐式类型转换
- 弱类型:支持隐式类型转换
JS数据类型
一共8种
- Boolean
- Null
- Undefined
- Number
- BigInt:可以用任意精度表示整数,即使超出Number的安全整数范围限制也可以安全地存储和操作
- String
- Symbol:符号类型是唯一的且不可修改的,通常用作Object的
key
- Object
内存空间
内存空间种类
- 代码空间:存储可执行代码
- 栈空间:调用栈
- 堆空间
堆空间和栈空间
- 原始类型的数据值直接保存在栈中;引用类型的值存放在堆中,而栈中存放着引用该值的地址
- 原始类型的赋值会完整复制变量值,而引用类型的赋值是复制引用地址
function foo() {
var a = '极客时间';
var b = a;
var c = {
name: '极客时间'
}
var d = c
}
函数执行到最后一行调用栈情况如图:
- 区分栈和堆两个存储空间的原因
- js引擎需要用栈来维护程序执行期间上下文的状态,如果栈空间很大所有数据都存放在其中会影响上下文切换的效率,进而影响到整个程序的执行效率
- 通常情况下栈空间都不会设置太大,主要用来存放一些原始类型的小数据
- 引用类型数据占用空间大,堆空间很大,能存放很多大的数据,但缺点是分配内存和回收内存都会占用一定时间
来源于:极客时间《浏览器工作原理与实践》