1.七种语言类型
js 中有七种语言类型,分别是 Undefined、Null、Number、String、Boolean、Symbol、Object。这七种类型可以分为两类,简单数据类型(基本数据类型)和复杂数据类型。Object 是复杂数据类型,其余六种类型为简单数据类型。
2.Object 类型的子类型
js 中还有一些类型归属于 Object 类型,它们可以称为 Object 的子类型,比如 Object、Function、Number、String、Array、Boolean、Regexp、Date、Error。
之所以称这些类型为「Object 的子类型」,是因为与这些类型对应的实例是具有属性和方法的对象。
比如 typeof new String(),得到的结果是 object。再比如对 new Number() 或 new Function() 产生的对象使用 Object.prototype.toString.call(产生的对象) 方法,得到的结果分别是 [object Array] 和 [object Function]。
3. 内建函数与内置对象
Array 是 js 中的内建函数(或原生函数),使用 Array() 可以构造 Array 类型的实例。同样,对象的每一种子类型都有自己的内建函数,使用 new 都可以产生自己的实例(ps:Symbol 类型行为不同)。
js 中的内置对象与内建函数是同一种东西。这个可以验证,利用Object. prototype.
toString.call(),测得 Object、Array 等的结果都是 [object Function]。
至于对象子类型间的继承关系,这涉及到原型链的知识,我会在另一篇文章中讨论。
知识理解的不同
在《JavaScript高级程序设计》中将 Object 的子类型定义为引用类型,有人也将这些类型叫做运行时类型。在我看来这些不同的名称源于不同的理解方式。
其实同一种知识,不同的人理解起来常常有一些不同。这些不同有时候并没有对错之分,只是知识的不同角度的诠释。就像同一片星空,在每个人的眼中却是不同的景色。
James Harris 2017-01-20 08-48-05 .jpg
网友评论