JavaScript中var something = null时是否仍会分配内存?
JavaScript中
null的内存分配与底层逻辑 1. 声明var something = null时会分配内存吗?
会。变量本身需要存储空间来保存它的值标识——哪怕这个值是null。当你声明这个变量时,JS引擎会在当前作用域的变量环境中为something预留一块内存(通常是栈内存,变量的元数据和原始值一般存在栈中),用来存储null对应的底层标记。
2. null是否指向堆上的空对象?
完全不会。typeof null === 'object'是历史遗留bug:早期JS引擎用3位二进制标记区分值的类型,000被分配给对象类型,而null被错误地标记为000,导致typeof判断出错。但本质上null是一个独立的原始值,它不指向任何对象,也没有对应的堆内存空间。
3. 整个过程的运作逻辑
- 执行
var something = null时,引擎首先在当前作用域(比如全局作用域)的变量栈中为something分配一块内存空间。 - 将
null对应的底层标记(也就是那个导致bug的000)写入这块栈内存。注意这个标记只是类型标识,不是堆内存的指针——因为null没有对应的对象,所以不会在堆上分配任何空间。 - 当后续访问
something时,引擎读取栈中的标记,识别出这是null值,不会尝试去堆内存中查找对应的对象。
内容的提问来源于stack exchange,提问作者sinNombre
相关产品推荐
相关产品推荐

