1. JavaScript 基本数据类型

    原始类型:Undefined Null Number String Boolean Symbol BigInt
    引用类型:Object

    Symbol 和 BigInt 都是 ES6 之后出现

    • Symbol 为的是解决全局变量冲突和私有域
    • BigInt 是解决整数精度,可以超过 Number.SAFE_INTEGER 的大小

    两种类型的区别在于存储位置不同

    • 原始类型数据直接存储在运行 stack 栈中,是简单的数据段,占据空间大小固定,属于被频繁使用的数据
    • 引用类型存储在 heap 堆中,占据空间不固定。引用类型如果存在栈中,可能会影响性能,因此一般在运行栈中存储的是该类型的指针,从而获得该实体中的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体

    堆和栈的概念存在于数据结构和操作系统内存中,在数据结构中

    • 在数据结构中,栈中数据的存取方式为先进后出。
    • 堆是一个优先队列,是按优先级来进行排序的,优先级可以按照大小来规定。

    在操作系统中,内存被分为栈区和堆区:

    • 栈区内存由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
    • 堆区内存一般由开发者分配释放,若开发者不释放,程序结束时可能由垃圾回收机制回收。
    1. 数据类型检测的方法

    (1)typeof,其中数组、对象、null都会被判断为object,其他判断都正确。
    (2)instanceof,其内部运行机制是判断在其原型链中能否找到该类型的原型
    (3)constructor,一是判断数据的类型,二是对象实例通过 constructor 对象访问它的构造函数
    (4)Object.prototype.toString.call
    (5)Number.isNaN
    (6)Array.isArray