本文已参与「新人创作礼」活动,一起开启掘金创作之路。
我们都知道js存储在内存中,会存在栈或堆中,栈中存放简单数据类型(基本数据类型),堆中复杂数据类型(引用数据类型),也就是对象。但是null属于简单数据类型,它却不存在栈中。
首先先来了解一下堆和栈,什么是堆,什么是栈?
- 栈:是一种特殊的列表,栈内的元素只能通过列表的一端访问,先进后出的数据结构,栈会由操作系统自动分配内存空间,自动释放,存储的是基础变量以及一些对象的引用变量,占据固定大小的空间。
- 堆:是一种经过排序的树形数据结构,每个结点都有一个值,且堆的存取是随意。堆由操作系统动态分配的内存,大小不定也不会自动释放,一般由程序员分配释放,也可由垃圾回收机制回收。
js数据类型包括简单数据类型和复杂数据类型。
基本数据类型共有6种:
- String
- Number
- Boolean
- null
- undefined
- Symbol
复杂数据类型
Array,Function,Object等,除了基本数据类型,都是引用数据类型。
js在堆和栈中是怎么存储的?
为什么null会存储在堆中?
MDN:
null是表示缺少的标识,指示变量未指向任何对象。把null作为尚未创建的对象,也许更好理解。在 API 中,null常在返回类型应是一个对象,但没有关联的值的地方使用。
也就是说null是一个对象类型,所以存储在堆中。
可以通过typeof判断null的类型。
null 与 undefined 有什么不同
typeof null // "object" (因为一些以前的原因而不是'null')
typeof undefined // "undefined"
null === undefined // false
null == undefined // true
null === null // true
null == null // true
!null //true
isNaN(1 + null) // false
isNaN(1 + undefined) // true
1 + null //1
1+undefined // NaN