- JavaScript 基本数据类型
原始类型:Undefined Null Number String Boolean Symbol BigInt
引用类型:Object
Symbol 和 BigInt 都是 ES6 之后出现
- Symbol 为的是解决全局变量冲突和私有域
- BigInt 是解决整数精度,可以超过 Number.SAFE_INTEGER 的大小
两种类型的区别在于存储位置不同
- 原始类型数据直接存储在运行 stack 栈中,是简单的数据段,占据空间大小固定,属于被频繁使用的数据
- 引用类型存储在 heap 堆中,占据空间不固定。引用类型如果存在栈中,可能会影响性能,因此一般在运行栈中存储的是该类型的指针,从而获得该实体中的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体
堆和栈的概念存在于数据结构和操作系统内存中,在数据结构中
- 在数据结构中,栈中数据的存取方式为先进后出。
- 堆是一个优先队列,是按优先级来进行排序的,优先级可以按照大小来规定。
在操作系统中,内存被分为栈区和堆区:
- 栈区内存由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
- 堆区内存一般由开发者分配释放,若开发者不释放,程序结束时可能由垃圾回收机制回收。
- 数据类型检测的方法
(1)typeof,其中数组、对象、null都会被判断为object,其他判断都正确。
(2)instanceof,其内部运行机制是判断在其原型链中能否找到该类型的原型。
(3)constructor,一是判断数据的类型,二是对象实例通过 constructor 对象访问它的构造函数
(4)Object.prototype.toString.call
(5)Number.isNaN
(6)Array.isArray
…