变量对象
- 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]]
参考资料
原文: