变量对象

    • number
    • string
    • boolean
    • undefined
    • null
      但是也有人认为是六种,加上object, 成为复杂数据类型。

    五种基本类型保存在内存中的栈中,大小固定,复制其变量时会创建这个值的一个副本。使用typeof区分。这些值是在底层上直接实现的,他们不是object,所以没有原型,没有构造函数。

    引用类型

    引用类型的值是对象,保存在堆内存中。引用类型的变量实际上是一个指针,它保存在栈中,指向堆内存中的对象,复制引用类型变量实际是复制该指针,所以他们都指向同一个对象,用instanceof确定一个值是哪种引用类型。

    内置对象、原生对象及宿主对象

    注意,宿主对象可能是ES自身实现的,完全符合规范的语义。从这点来说,他们能称为“原生宿主”对象(尽快很理论),不过规范没有定义“原生宿主”对象的概念。

    • Boolean: 布尔对象
    • String: 字符串对象
    • Number: 数字对象
      这些对象的创建,是通过相应的内置构造器创建,并且包含原生值作为其内部属性,这些对象可以转换省原始值,反之亦然。

    typeof 返回值

    实际应用是用来检测一个对象是否已经定义或者是否已经赋值:

    返回的类型只有六种:

    • number
    • boolean
    • undefined
    • object
    • function

    instanceof 操作符用来比较两个操作数的构造函数。只有在比较自定义的对象时才有意义。如果用来比较内置类型,将会和 typeof 操作符 一样用处不大。

    Object.prototype.toString获取`[[class]]

    参考资料

    原文: