8类型(Type)
在本规范的算法里,操作数都有一个对应的类型,所有的类型都在本章中定义。类型可以进一步地分为ECMA语言类型和规范类型。
ECMA语言类型是在我们使用ECMAScript语言编程的时候使用的。ECMA语言类型有Undefined,Null,String,Boolean,Number和Object(译者注:其中Undefined,Null,String,Boolean,Number为基元类型,Object为对象,对象由基元类型构成。)
ECMA规范类型是作为元值用来辅助描述ECMAScript的语法构造和语言类型的。ECMA规范类型有Reference,List,Completion,Property Descriptor,Property Identifier,Lexcical Environment和Environment Record。在ECMAScript的实现里,规范类型的值不需要对应任何具体的实体。规范类型的值可用于表示表达式运算结果的中间值,但这些值不能作为对象的属性或者变量的值存储。
在本规范里,我们用“Type(x)”来表示x的类型,这里的类型就是上面说的ECMA语言类型和规范类型。
8.1 Undefined
Undefined类型只有唯一的一个值undefined。任何没有被赋值的变量都拥有值undefined。
8.2 Null
Null类型拥有唯一值null。
8.3 Boolean
Boolean类型对应一个拥有两个值的逻辑实体,这两个值为true和false。
8.4 String
String类型是由有限的0个或多个16位无符号整数组成的有序序列。在ECMAScript中一般用来代表文本数据,String中的每一个无符号整数都被当做一个代码单元(见第六章)。每个无符号整数占据字符串中的一个位置,用非负整数索引这些位置。第一个元素占据第0位,第二个整数占据第1位,以此类推。字符串的长度(length)就是这些无符号整数的个数。空字符串的长度(length)为0,因此不包含任何的元素。
当一个字符串包含文本数据,其中每一个元素都被认为是独立的UTF-16单元。无论这是不是字符串的实际存储格式,它们都被认为是用UTF-16单元表示。除非特别声明,所有对字符串的操作均被当作为对16位无符号整数序列的操作。这些操作不保证结果字符串符合标准化的形式,也不保证语言的敏感性。
8.5 Number
Number类型不详细翻译,看着就头大。简单说一下吧,它是用符合IEEE754标准的64位浮点数表示的。
8.6 Object
对象是属性的集合。属性可以分为数据属性,访问器属性和内部属性三种。
数据属性由名字和对应的ECMA语言类型值,和属性特性(一些布尔类型值的集合)组成。
访问器属性由名字和一个或两个访问器函数,和属性特性(一些布尔类型值的集合)组成。这两个访问器函数是用来作为提取和存储该属性值得函数。
内部属性没有名字,且不能通过ECMAScript语言直接访问。内部属性的存在纯粹是因为规范的需要。