ECMAScript 语言规范中的术语定义

528 阅读8分钟

以下是基于 ECMAScript 5.1 版本 4.3 节内容做的翻译,最后补充了与 ES6 中的术语定义的区别说明。因为规范中对术语的定义很严谨,所以有时大家搞不太懂的一些术语名词,可以在规范中的找到明确定义。

4.3 术语定义

本文档使用了下列术语和定义。

4.3.1 类型

一类数据的集合

4.3.2 原始值

是以下类型之一的成员:未定义(Undefined)、空(Null)、数字(Number)、布尔(Boolean) 、字符串(String)。

注:原始值直接代表语言实现的最底层基准。

4.3.3 对象

对象类型(Object type)的成员。

注:对象是属性的集合,并且有一个原型对象。原型可能是空值。

4.3.4 构造器

用来创建和初始化对象的函数对象。

注:构造器的“prototpe”属性是用来实现继承和共享属性的原型对象。

4.3.5 原型

为其他对象提供共享属性的对象。

注:当使用构造器创建对象时,为了解析属性引用,对象隐式引用了构造器的“prototpe”属性。构造器的“prototpe”属性可以通过程序表达式 constructor.prototype 引用。所有引用同一原型的对象,通过继承,都能共享添加到原型上的属性。另外,可以使用内置的 Object.create 函数,为创建的新对象显式指定原型。

4.3.6 原生对象

ECMAScript 实现中,并非由宿主环境,而是完全通过本规范定义其语义的对象。

注:本规范中定义了标准原生对象。一些原生对象是内置的,其他原生对象则是在 ECMAScript 程序执行期间构建的。

4.3.7 内置对象

由 ECMAScript 实现提供的、独立于宿主环境的、在 ECMAScript 程序执行之初就存在的对象。

注:本规范中定义了标准内置对象,ECMAScript 实现可以指定和定义其他的。每个内置对象都是原生对象。_内置构造器_既是内置对象,也是构造器。

译者注:“独立于宿主环境”表示宿主环境无关的,且每个环境都必须实现的对象。

4.3.8 宿主对象

由宿主环境提供的、用于完善 ECMAScript 执行环境的对象。

注:一个对象,不是原生对象,就是宿主对象。

4.3.9 undefined

变量没赋值时,使用的一个原始值。

4.3.10 未定义类型

仅包含唯一成员 undefined 的类型。

4.3.11 null

对象值故意缺席时,使用的一个原始值。

4.3.12 空类型

仅包含唯一成员 null 的类型。

4.3.13 布尔值

布尔类型的成员。

注:一共只有两个布尔值,truefalse

4.3.14 布尔类型

由原始值 truefalse 组成的类型。

4.3.15 布尔对象

对象类型的成员,是标准内置构造器 Boolean 的一个实例。

注:布尔对象使用 Boolean 构造器在 new 表达式中创建,创建时需要提供一个布尔值作为参数。此参数会成为生成对象里的一个内部属性的值。一个布尔对象可以强制转换成布尔值。

4.3.16 字符串值

是一个原始值,由零个或多个 16 位无符号整数组成的有限有序序列。

注:字符串值是字符串类型的成员。序列中的每个整数值通常代表 UTF-16 文本的单个 16 位单元。对于其值,ECMAScript 只规定了必须是 16 位无符号整数,除此之外没有任何其他的限制和要求。

4.3.17 字符串类型

所有可能的字符串值的集合。

4.3.18 字符串对象

对象类型的成员,是标准内置构造器 String 的一个实例。

注:字符串对象使用 String 构造器在 new 表达式中创建,创建时需要提供一个字符串值作为参数。此参数会成为生成对象里的一个内部属性的值。当把 String 构造器作为函数调用时,可将一个字符串对象强制转换成字符串值。

4.3.19 数值

是一个原始值,使用双精度 64 位二进制格式的 IEEE754 值表示。

注:数值是数字类型的成员,是数字的直接表示方式。

4.3.20 数字类型

所有可能的数值的集合。包括特殊的“Not-a-Number”(NaN)值、正无穷和负无穷。

4.3.21 数字对象

对象类型的成员,是标准内置构造器 Number 的一个实例。

注:数字对象使用 Number 构造器在 new 表达式中创建,创建时需要提供一个数值作为参数。此参数会成为生成对象里的一个内部属性的值。当把 Number 构造器作为函数调用时,可将一个数字对象强制转换成数值。

4.3.22 Infinity

正无穷的数值表示。

4.3.23 NaN

代表 IEEE 754 里表示“Not-a-Number”的数值。

4.3.24 函数

对象类型的成员,是标准内置构造器 Function 的一个实例。可以作为子程序被调用。

注:函数除了命名属性,还包含可执行代码、状态,用来确定被调用时的行为。函数的代码可以不用 ECMAScript 写。

译者注:“函数的代码可以不用 ECMAScript 写”表示函数的代码实现不限于使用 ECMAScript。

4.3.25 内置函数

作为函数的内置对象。

注:比如 parseIntMath.exp 都是内置函数。一个实现可以提供本规范没有描述的、依赖于实现的内置函数。

译者注:这里把 Math.exp 说成内置函数并不严谨,归为内置方法更合适,也更符合直觉一点。

4.3.26 属性

对象的一部分,用来关联名(name)和值(value)。

注:根据属性的特性,属性值可以表现为直接的数据值(一个原始值、对象或函数对象)或间接的一对访问器函数。

4.3.27 方法

作为属性值的函数。

注:当一个函数是作为对象方法调用时,函数内部的 this 指向这个对象。

4.3.28 内置方法

作为内置函数的方法。

译者注:这个定义有些莫名其妙。严谨地说成是 “作为内置对象属性值的函数” 更合适些。

首先内置方法本身肯定是函数,而且要定义在一个对象上。以 Math.exp 举例,就是个内置方法;但如果从另一个角度,把 Math 当做是命名空间,那么 Math.exp 就表示这个命名空间下的内置函数,这也是上面把它归为“内置函数”的原因。

同样的例子还有,JSON.stringifyJSON.parse 两个方法。

4.3.29 特性

定义一个属性某些特征的内部值。

4.3.30 自身属性

直接定义在对象上的属性。

4.3.31 继承属性

不是对象的自身属性,而是对象原型上的属性(自身或继承的)。


补充:ES6 中的术语定义

ES6/ECMAScript 2015 中本节的术语定义与 ES5.1 大体相同。术语个数调整至 35 个,总结为:增加 4 个,修改 2 个,删除了 1 个。

下面详细列明。

增加的 4 个

普通对象(ordinary object)

是这样一个对象——拥有每个对象都有的基本内部方法(essential internal methods),且每个方法都是默认的行为表现。

独特对象(exotic object)

注:一个对象不是普通对象,就是独特对象。

是这样一个对象——没有拥有每个对象都有的基本内部方法;或拥有但有一个或多个方法的行为表现不是默认的。

Symbol 值

是一个原始指,对象可以使用它作为属性键的值。它属于一种非字符串类型的、能标识唯一性的 Symbol 类型。

译者注:从此,对象属性键的值可以有两种选择,一种使用字符串,一种使用 Symbol 值。

Symbol 类型

所有可能的 Symbol 值的集合。

Symbol 对象

对象类型的成员,是标准内置构造器 Symbol 的一个实例。

译者注:可笑的是,作为开发人员我们并不能使用 new Symbol() 的方式创建一个 Symbol 对象。

因为规范中定义,如果以 new 的方式调用 Symbol 构造器,会抛出 TypeError 类型错。

我们只能通过某些方式,证明确实是有“Symbol 对象”的——在 Symbol 值上调用 Symbol.prototype 对象上共享的方法,比如 toString()valueOf() 等。

修改的 2 个

原始值

ES6 引入了一个新的原始类型 Symbol。

是以下类型之一的成员:未定义(Undefined)、空(Null)、数字(Number)、布尔(Boolean) 、字符串(String)、Symbol(Symbol)。

原生对象 -> 标准对象(standard objec)

由本规范定义其语义的对象。

译者注:规范试图模糊“原生”的概念,是否表示宿主环境里提供的 DOM、BOM 等 API 对象也可以理解为是原生对象了?

删除的 1 个

宿主对象

相关链接

(完)