这也是个老生常谈的问题,最近得空也开始总结下这方面的知识点。学过java的同学,都知道java把内存分为两种形式,一种是栈内存,另一种是堆内存。java的基本类型(int,short,long,byte,float,double,boolean,char)在栈区分配空间,所有的对象都在堆Heap中分配空间。我们按照这思路来谈下JavaScript。
相信看过我以前博客的朋友也知道,我以前也说过JavaSctipt 语言类型和类型检测的一些知识点,想再了解的朋友也可以点进去看下。JavaSctipt 语言类型和类型检测
在此之前,我先额外的补充下类型和存储结构的一些相干知识点
内置类型
JavaScript目前有八种内置类型(包含ES6的symbol):
null
undefined
string
number
boolean
object
symbol
BigInt
解释下typeof null 为 'object'的bug
JavaScript中的数据在底层是以二进制存储,比如null所有存储值都是0,但是底层的判断机制,只要前三位为0,就会判定为object,所以才会有typeof null === 'object'这个bug。
基本包装类型
string
number
boolean
自动创建的基本包装类型的对象,非Boolean,Number, String内置函数new出来的,对象只存在代码的执行瞬间。所有有些面试题也会问到String(1)和new String(1)的区别。