JavaScript浅析 -- 原生对象、内置对象、宿主对象

原生对象(15 种)

原生对象分为两类:原始类型(primitive type)和对象类型(object type)。原始类型又分为两类,一类是空值,一类是包装对象;对象类型也可以分为两类:一类是构造器对象,一类是单体内置对象

空值(2 种)

逻辑上,undefined 表示原始类型的空值,null 表示对象类型的空值

  • Undefined
  • Null

包装对象(3 种)

字符串 string、数字 number、布尔值 boolean 虽然属于原始类型。但是,由于其包装对象的性质,可以调用属性和方法

  • Number 数字类型
  • String 字符串类型
  • Boolean 布尔类型

构造器对象(9 种)

普通的对象是命名值的无序集合,但是通过不同的构造器,javascript 定义了功能各异的多种对象

[注意]如果显式地使用 new 构造器函数来定义包装对象,那么字符串 String、数字 number、布尔值 boolean 也属于构造器对象

单体内置对象(4 种)

不需声明或者使用构造器构造,直接在相应场景使用即可

内置对象

内置对象(built-in object),其定义为“由 ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现”。前半部分和原生对象很像,实际上内置对象也都是原生对象,区别在于后半句“在 ECMAScript 程序开始执行时出现”,这意味着开发者不必明确实例化内置对象,它在程序开始执行时已被实例化了,可以直接使用。 目前定义的内置对象只有两个:Global 和 Math。

内置对象是原生对象的一种,主要区别在于是否需要实例化。举个例子,在使用原生对象时,我们一般都需要 var obj = new Object()或字面量法 var obj = {}明确实例化生成一个实例再去调用 obj.toString()。但如果是内置对象 Global 和 Math,我们只需 Math.floor(2.5)直接调用,不需要再进行实例化。

宿主对象

宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。 那么什么是宿主环境呢?在 ECMAScript 中,“宿主”指的就是网页的运行环境,即“操作系统”和“浏览器”。比如浏览器提供的 BOM 和 DOM 都是宿主对象(对于不同的宿主环境所展示的内容不同),它不是 ECMAScript 官方提供的,而是浏览器这个宿主为了方便开发者而加上去的,所以实际上所有非原生对象都是宿主对象。