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

1. 原生对象

原生对象(native object,也称本地对象),其定义为“独立于宿主环境的 ECMAScript实现提供的对象”。即ECMAScript本身带有的一些基本对象,而不包含浏览器等宿主提供的对象。它包含:String、Boolean、Number、Object、Function、Array、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError

可以看到,主要有基本数据类型:Number、String、Boolean、Object,其中Object又有Function、Array、Date、RegExp、Error以及其他错误类等。简单来说,原生对象就是 ECMAScript 定义的类(引用类型)

2. 内置对象

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

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

3. 宿主对象

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

推荐阅读更多精彩内容