6.1 ECMAScript语言类型
ECMAScript语言类型就是指可以直接在由ECMAScript编写的程序中操作使用的值的类型,有以下几种:Undefined,Null,Boolean,String,Symbol,Number,Object。ECMAScript语言值有一一对应的ECMAScript语言类型
6.1.1 Undefined类型
Undefined类型只有一种值,就是undefined,任何变量在没有被赋值之前都有undefined值
6.1.2 Null类型
Null类型只有一种值,就是null
6.1.3 Boolean类型
Boolean 类型表示逻辑实体,有两个值,true 和 false。
6.1.4 String类型
字符串类型是一组有序的由0个或多个16位无符号整型(元素)最多到253 - 1个元素的组成的序列.字符串类型通常被用于表示文本数据,这时String当中的每一个元素都被当作UTF-16编码的值。每个元素被当作一个在这个序列中的占位符。序列中的位置索引都是非负数。第一个元素的索引值是0,第二个元素是1,按此排列。String的length值就是其元素的个数,空字符串的length是0,所以它不包含任何元素。
在ECMAScript中解释运行String值时,其每一个元素都被当作UTF-16编码,然而,ECMAScript没有对String当中的元素作任何编码限制,所以他们可能被错误的解释运行。不解释字符串内容的操作将会把他们当作一组无差别的16位无符号整型。String.prototype.normalize(21.1.3.12)函数能按照指定的规则正规化String值。String.prototype.localeCompare(21.1.3.10)会在函数内把String值正规化。没有其他操作会隐式的正规化String值。只有显示指定规则或者本地语言规定才会发生这样的操作。
注意:这种设计实现的背后原理就是为了能让String的实现即简单又能尽可能的高性能。如果ECMAScript源代码被正规化像C语言那样,String也会被当作是已经正规化了的,只要他们不包含任何Unicode转义序列。 一些操作会把String内容当作UTF-16编码的Unicode代码点,在这种情况下,操作流程如下:
- 一个字符单元如果是在0到0xD7FF或者0xE000到0xFFFF范围内,会被解释为同样的值
- 一个两个字符的序列,当第一个字符c1在0xD800到0xDBFF范围中,并且第二个字符c2在0xDC00到0xDFFF中,是一个代理对,并且会被解释执行一个值为(c1-0xD800)× 0x400 + (c2 - 0xDC00) + 0x10000的代码代码单元(10.1.2)
- 一个字符单元在0xD800到0xDFFF范围中是,但是不是一个代理对,会被解释执行为同样的值
6.1.5 Symbol类型
Symbol类型是一组非String值的集合,可以被当作Object属性的key值
任意一个Symbol值都是独一无二并且是不可变的
任意一个Symbol值都持有一个名叫[[Description]]的关联值,这个值要么是undefined,要么是String值
6.1.5.1 Symbol特性
Symbol特性是Symbol值根据本规范算法规定的内置属性值,他们一般被当作规范扩展的那些点中属性的key值,除非另外规定,symbol特性都共享在8.2中。symbol特性都用@@name的形式标记,name值主要有如下表1如实
特性名 | 描述 | V值和作用 |
---|---|---|
@@hasInstance | "Symbol.hasInstance" | 一个方法用来识别构造函数对象是否是构造函数的实例,在instance of 操作时调用 |
@@isConcatSpreadable | "Symbol.isConcatSpreadable" | 一个布尔值,当为true时意味着它的array元素可以被Array.prototype.concat方法打平 |
@@iterator | "Symbol.iterator" | 一个方法,给一个对象返回默认的迭代器,当用for-of时调用 |
@@match | "Symbol.match" | 一个正则表达式方法,用来给字符串匹配正则表达式,当用String.prototype.match方法时调用 |
@@replace | "Symbol.replace" | 一个正则表达式方法,用来替换匹配了的子字符串, 当用String.prototype.search 方法时调用 |
@@search | "Symbol.search" | 一个正则表达式,返回正则表达式比配上的字符串的索引值,当用 String.prototype.search方法时调用 |
@@species | "Symbol.species" | 用来构建派生对象的构造函数的函数值属性 |
@@split | "Symbol.split" | 一个正则表达式方法,用来根据匹配上正则表达式的索引分割字符串 |
@@toPrimitive | "Symbol.toPrimitive" | 一个用来把对象转换为原始值的函数,当用ToPrimitive时调用 |
@@toStringTag | "Symbol.toStringTag" | 一个String值,用来创建默认String对象的描述,当用内置方法Object.prototype.toString方法时可访问 |
@@unscopables | "Symbol.unscopables" | An object valued property whose own and inherited property names are property names that are excluded from the with environment bindings of the associated object |
6.1.6 Number类型
准确的说,数值类型拥有 18437736874454810627(即2^64-2^53 +3)个值,表示为IEEE 754-2008标准64位双精度数值,在IEEE二进制浮点数算法中定义的,减去IEEE标准中的 9007199254740990(即2^53-2)个明显的“非数字”值,在 ECMAScript 中,它们被表示为一个单独的特殊值:NaN。(请注意,NaN值由程序表达式 NaN 产生,并假设执行程序不能调整定义的全局变量 NaN)。在某些实现中,外部代码可以识别出非数字值之间的不同,但是这依赖于具体实现,所有的NaN值都是无法互相区分的。
注意:在ArrayBuffer(24.1)的位模式中可能会发现存储的一个数字值不一定会相等于在ECMAScript中使用的值 有两个特殊值,正无穷大和负无穷大,为简洁起见,这些值有时会被用+∞和 -∞表示(这两个无穷大值可以用+Infinity(或者Infinityh)和-Infinity产生)
其他18437736874454810627(即2^64-2^53 +3)个值称为有限值,一半是正值,一半是负值。对于每个正数而言,都有一个与之对应的、相同大小的负数。
注意这里也有一个正零和负零,同样的为了简洁,会用+0和-0表示(注意这两个值也由+0(0)或者-0产生)
这18437736874454810622 (2^64-2^53-2)个有限非零值分为两种:
18428729675200069632 (2^64-2^54)个是格式化的,有如下格式:
s × m × 2^e
这里的s是+1或者-1,m是正整数,小于2^53大于2^52,e是一个从-1074到971的整数
剩下的9007199254740990(2^53-2)个值是非常规的,有如下格式:
s × m × 2^e
这里的s是+1或者-1,m是正整数,小于2^52,e是-1074
注意,所有绝对值不大于2^53的无论是正数还是负数都可以用Number类型来表示(甚至,0有两种表示方法,+0和-0)
一个有限的非零数值用上述的两种格式表示时,m是偶数,那他就有一个偶数标记,否则就有一个奇数标记
本规范中,当x表示一个精确的非零数值(甚至可以是无理数,比如π),"the Number value for x"这句话的意思就是以以下的方式选择一个数值:从所有有限数值集合中(不包括-0,包括2^1024和-2^2014这两个没法表示的值)选择一个最接近x的值。如果有两个是最接近x的值,那就选择有偶数标记的。2^1024和-2^1024都是当作有偶数标识的。最终,如果2^1024是最接近的那个值,用+∞代替,如果是-2^1024,那就用-∞代替,如果是+0,只有x<0时,才会用-0代替。其他选择的值不会发生改变(这个过程是在符合IEEE 754-2008中的“round to nearest, ties to even”模式)。
一些ECMAScript操作符只会处理在-2^31到2^31 - 1 范围内的数值,或者0到2^16-1。这些操作符接受任何类型的Number类型,但是会先把操作数转换到所只会处理的范围,转换操作详见7.1
6.1.7 Object类型
一个Object是一个属性的集合,每个属性都是一个数据属性或者访问器属性
- 一个数据属性将关联一个ECMAScript language value的key值,和一组Boolean属性
- 一个访问器属性将关联一个或者两个访问器函数,和一组Boolean属性,访问器函数用来对所关联的属性进行取值和赋值
属性是通过key值来访问的,一个属性的key值要么是ECMAScript String值,要么是Symbol值。所有的String和Symbol类型值,包括空字符串,都是合法的key。一个String类型的属性名可以作为属性key。
一个整数索引是一个典型的数字字符串(如7.1.16中描述),并且其数值是+0,或者小于2^53-1的正数,一个数组索引是一个大于+0,小于2^32-1的整数索引。
属性键值是用来访问属性及获取其值得。这有两个操作:get、set,分别对应取值和赋值。通过get和set操作可以访问到的属性即包括对象自身的属性,还包括从其他对象继承而来的属性,继承而来的属性也可能是那个父对象的自身属性或者继承属性。对象的每个属性都必须拥有一个唯一的键值来区分不同属性。
从逻辑上来说,所有的对象都是属性的集合,但是有非常多种形态的对象,他们有着不同的访问属性和操作属性的语法。Ordinary objects 是最普通的一种对象形态,有着默认的语法。 exotic object是那种有任何属性语法和默认语法不一样的对象。
6.1.7.1 属性特性
特性是用来定义和解释本规范中的Object属性的状态。数据属性键值关联到如表2中所列的特性
表2 数据属性的特性
特性名 | 取值范围 | 描述 |
---|---|---|
[[Value]] | 任何ECMAScript 语言类型 | 默认为undefined,通过get访问器来获取其值 |
[[Writable]] | Boolean | 如果为false,不能通过[[Set]]操作来改变[[Value]] |
[[Enumerable]] | Boolean | 如果为true,可以通过for-in枚举,否则就说明这个属性是不可枚举的 |
[[Configurable]] | Boolean | 如果为false, 不能删除这个属性或者将其改为访问器属性,不能改变这个属性的特性(除了[[Value]]和把[[Writable]]改为false) |
一个访问器属性有如表3所列的特性
表3 访问器属性特性
特性名 | 取值范围 | 描述 |
---|---|---|
[[Get]] | Object或者Undefined | 如果是Object值,那必须是个函数对象。每次调用 get 访问器来获取这个属性的值时,都会以空参数列表调用这个函数的内置属性[[Call]]方法 |
[[Set]] | Object获取Undefined | 如果是Object值,那必须是个函数对象。每次调用 set 访问器来给这个属性赋值时,都会以将要赋值的那个值作为唯一参数调用这个函数的内置属性[[Call]]方法。[[Set]] 后操作可能会通过调用 [[Get]] 操作来作为返回值 |
[[Enumerable]] | Boolean | 如果为true,可以通过for-in枚举,否则就说明这个属性是不可枚举的 |
[[Configurable]] | Boolean | 如果为false, 不能删除该属性,也不能把该属性变成数据属性,也不能改变任何该属性的特性 |
如果本规范没有明确指出属性特性的初始值,那么其默认值在表4中给出
表4 特性默认值
特性名 | 默认值 |
---|---|
[[Value]] | undefined |
[[Get]] | undefined |
[[Set]] | undefined |
[[Writable]] | false |
[[Enumerable]] | false |
[[Configurable]] | false |
6.1.7.2 Object内置方法和内置属性
在ECMAScript中objects的确切语法,都是通过一种叫内部方法的算法定义的。ECMAScript引擎中的每个对象,都关联着一序列的在运行时定义的内部方法。这些内部方法并不是ECMAScript语言的一部分。在规范中定义它们完全是出于解释的目的。然而每种ECMAScript中的对象实现都必须实现规范中定义这些内部方法,具体实现取决于实现者。
内部方法名是多态的,这意味着不同的对象调用同一个名字的方法会执行不同的算法。对象本身就是调用方法时的"target"。在运行时,如果某个实现去调用对象不支持的方法,就会抛出TypeError异常。
许多内部算法都会用到关联到Object中的内部属性。内部属性不是继承来的,根据规定的内部属性,可以关联到任意一种ECMAScript语言类型或者特定的ECMAScript规范类型。除非显示指定值,内部属性都是在对创建时生成的,并且不允许动态添加给Object。除非特别说明,内部属性的初始值都是undefined。各种算法会根据规定创建内部属性,然而ECMAScript语言没有提供直接创建关联这些属性的对象的途径。
内部属性和内部方法都是用’[[]]‘包裹命名来标示的
表5总结了ECMAScript语言代码会用到的基本的内部方法。每个对象都必须有相应的算法来实现这些方法,然后所有对象并不是总用同一个算法来实现这些方法。
表5以及和表5类似的表中的"Signature"栏是指这个内部方法的调用模式。这个调用模式包括一个用括号包裹的参数列表,如果参数名是ECMAScript中的类型,说明这个类型是这个方法所需要的参数类型。如果内部方法指定了返回值,会以->符号指出返回指的类型。其所用的类型参考第六章。还增加了”any",指的是任意ECMAScript语言类型。一个内部方法默认返回Completion Record。内部方法可以访问对象本省,并且对象是内部方法的调用目标。
表5 基本内部方法
内部方法 | 模式 | 说明 |
---|---|---|
[[GetPrototypeOf]] | () → Object / Null | 获取对象的继承对象,null说明这个对象没有继承属性 |
[[SetPrototypeOf]] | (Object / Null) → Boolean | 把Object作为该对象的继承对象。传null说明没有继承属性,返回true说明操作成功,返回false说明操作失败 |
[[IsExtensible]] | ( ) → Boolean | 这个方法决定了是否可以给对象添加属性 |
[[PreventExtensions]] | ( ) → Boolean | 控制是否可以给对象添加新属性,false是不能,true为可以 |
[[GetOwnProperty]] | (propertyKey) → Undefined / Property Descriptor | 返回名字为propertyKey的属性的 Property Descriptor。如果不存在这个属性,返回undefined |
[[HasProperty]] | (propertyKey) → Boolean | 如果存在这个属性(自有或者继承),返回true,否则返回false |
[[Get]] | (propertyKey, Receiver) → any | 返回名为propertyKey的属性值,如果需要执行代码才能获取这个值,那执行代码时Receiver为this值 |
[[Set]] | (propertyKey, value, Receiver) → Boolean | 把propertyKey属性值设为value,如果要执行代码,那Receiver为this值,返回true说明设置成功,返回false说明设置失败 |
[[Delete]] | (propertyKey) → Boolean | 移除名为propertyKey的属性,没移除成功返回false,移除成功或者属性不存在返回true |
[[DefineOwnProperty]] | (propertyKey, PropertyDescriptor) → Boolean | 创建或者修改名为propertyKey的属性的PropertyDescriptor。成功返回true,失败返回false |
[[OwnPropertyKeys]] | ()→List of propertyKey | 返回对象自身所有属性的列表 |
表6总结了function特有的内部方法,函数对象有[[Call]]内部方法,构造函数有[[Contruct]]内部方法
表6 Function对象特有的内部方法
内部方法 | 模式 | 说明 |
---|---|---|
[[Call]] | (any, a List of any) → any | 通过函数调用表达式,执行对象关联的代码,参数为this值和一个包含参数的list。对象实现了找个方法,就称这个方法为callable |
[[Construct]] | (a List of any, Object) → Object | 通过new或者super操作创建一个对象,第一个参数是要这个操作需要的参数,第二个参数为new操作符时应用的对象。实现了个方法的对象称为构造函数,函数不一定都是构造函数,那些非构造函数的函数就没有[[Construct]]内部方法 |
第九章定了这些内部方法的语法,在任何没有实现这些方法的对象上调用这些内部方法,抛出TypeError异常
6.1.7.3 内部方法的不可变性
ECMAScript引擎都必须遵守以下列出的内部方法不可变得地方。在本规范中的普通的ECMAScript对象和exotic对象都具有这些不变性ECMAScript Proxy对象拥有这些不变性意味着运行时检测调用[[ProxyHandler]]对象的结果
任何实现都必须有这些不可变性。违反这些不可变形会导致ECMAScript代码有不可预期的行为以及导致安全问题。无论怎么样,违反这些不可变形一定会导致内存不安全
一个实现不可以让这些不可变性是可选的,应该是强制的
定义:
- 内部方法的target取决于谁调用这个内部方法
- target如果[[IsExtensibel]]返回false,或者调用[[PreventExtensions]]返回true,那和target是不可扩展的
- 不存在的属性是指这个属性不是这个不可扩展对象的自身属性
- SameValue的所有引用取决于SameValue算法的定义
[[GetPrototypeOf]] ( )
- 返回值的类型必须是Object或者Null
- target是不可扩展的,并且[[GetPrototypeOf]]返回了v,那任何时候调用[[GetPrototypeOf]]都返回v的同样值
注意1:对象的原型链是有限的(就是说,开始于某个对象,[[GetPrototypeOf]] 最终会得到null。然而,这个要求不是一个强制的,如果原型链上包括任何不用[[GetPrototypeOf]]的exotic对象。这就会形成一个原型链环,当访问属性时就可能会导致死循环
[[SetPrototypeOf]] (V)
- 返回值必须是Boolean类型
- 如果target是不可扩展的,[[SetPrototypeOf]]必须返回false,除非V和target的[[GetPrototypeOf]]值是同样的。
[[IsExtensible]] ( )
- 返回值必须是Boolean类型
- 如果 [[IsExtensible]] 返回 false, 所有 [[IsExtensible]] 调用都返回 false.
[[PreventExtensions]] ( )
- 返回值类型必须是 Boolean.
- 如果 [[PreventExtensions]] 返回 true, 所有 [[IsExtensible]] 调用必须返回 false 并且认为target是non-extensible.
[[GetOwnProperty]] (P)
- 返回值必须是Property Descriptor 或者 Undefined.
- 如果返回值是 Property Descriptor, 那么返回值必须是一个完整的property descriptor (详细见 6.2.4.6).
- 如果属性 P 描述为数据属性,其 Desc.[[Value]] 和 v 相等并且 Desc.[[Writable]] 和 Desc.[[Configurable]] 都为 false, 那么所有[[GetOwnProperty]] ( P )的调用都将返回和 Desc.[[Value]] 相同的值 .
- 如果 P 的 非 [[Writable]] 特性都将会变化或者 P 可能消失,那么 P 的 [[Configurable]] 特性必须为 true.
- 如果 [[Writable]] 可能由 false 改为 true, 那么 [[Configurable]] 特性必须为 true.
- 如果target是 non-extensible 并且 P不存在, 那么任何[[GetOwnProperty]] (P) 调用都将把 P描述为不存在 ( [[GetOwnProperty]] (P) 必须返回 undefined).
注意2:第三条不可变形可以得到一个结论。如果一个数据属性可能会返回不同的值,那么Desc.[[Writable]] 和 Desc.[[Configurable]] 必须为 true,尽管内部方法没有改变value的机制
[[DefineOwnProperty]] (P, Desc)
- 返回值的类型必须是 Boolean.
- 如果 P 是 non-configurable 的属性,[[DefineOwnProperty]] 必须返回false, 除非下面的情况:
- P 是 non-configurable 但是可写的自身属性,可以改成 non-configurable 和不可写的数据属性.
- 所有 Desc 的属性值和 P's 属性值一样.
- 如果 target 是 non-extensible,那 [[DefineOwnProperty]] (P, Desc)必须返回 false,也就是说 non-extensible 对象不能扩展新属性
[[HasProperty]] ( P )
- 返回值的类型必须是 Boolean.
- 如果 P 是non-configurable 或者是访问器,那[[HasProperty]] 必须返回true.
[[Get]] (P, Receiver)
- 如果 P a non-configurable, non-writable 的数据属性,值为v, 返回v.
- 如果 P 是 non-configurable 的访问器,并且其 [[Get]] 特性为 undefined, 那么 [[Get]] 操作必须返回 undefined.
[[Set]] ( P, V, Receiver)
- 返回值的类型必须是 Boolean.
- 如果 P non-configurable, non-writable 数据属性, 那么除非V和 P的[[Value]]值一样,否则 [[Set]] 必须返回false
- 如果 P 是一个 non-configurable 访问器,并且其[[Set]]属性是undefined,那么必须返回false.
[[Delete]] ( P )
- 返回值的类型必须是 Boolean.
- 如果 P 是 non-configurable 必须返回false.
[[OwnPropertyKeys]] ( )
- 返回值类型必须是 List.
- List 中的元素必须是String 或者 Symbol.
- 至少返回所有non-configurable 的自身属性.
- 如果对象是 is non-extensible, 返回的 List 必须只能包含自身属性
[[Construct]] ( )
- 返回值类型必须是 Object.
6.1.7.4 普通的内置对象
这些内置对象都是被规范内的算法明确引用的,并且一般都有明确的领域。除非另有说明一个内置对象对应着一组类似对象,每个对应一个领域。
规范中%name%这样标示的就是内置对象,8.3决定了这些内置对象的描述以及领域。表7列出了这些内置对象
表7 内置对象
内置名称 | 全局名 | ECMAScript 语言关系 | |
---|---|---|---|
%Array% | Array | Array 构造函数 (22.1.1) | |
%ArrayBuffer% | ArrayBuffer | ArrayBuffer 构造函数 (24.1.2) | |
%ArrayBufferPrototype% | ArrayBuffer.prototype | %ArrayBuffer% 的 prototype属性的初始值 | |
%ArrayIteratorPrototype% | Array 产生器 对象的原型 (22.1.5) | ||
%ArrayPrototype% | Array.prototype | %Array% 的prototype初始值(22.1.3) | |
%ArrayProto_values% | Array.prototype.values | %ArrayPrototype% value 属性的初始值(22.1.3.30) | |
%Boolean% | Boolean | Boolean 构造函数 (19.3.1) | |
%BooleanPrototype% | Boolean.prototype | %Boolean% 的prototype 属性的初始值 (19.3.3) | |
%DataView% | DataView | DataView 构造函数 (24.2.2) | |
%DataViewPrototype% | DataView.prototype | %DataView% 的prototype属性的初始值 | |
%Date% | Date | Date 构造函数 (20.3.2) | |
%DatePrototype% | Date.prototype | %Date%.的prototype属性的初始值 | |
%decodeURI% | decodeURI | decodeURI 函数 (18.2.6.2) | |
%decodeURIComponent% | decodeURIComponent | decodeURIComponent 函数 (18.2.6.3) | |
%encodeURI% | encodeURI | encodeURI 函数 (18.2.6.4) | |
%encodeURIComponent% | encodeURIComponent | encodeURIComponent 函数 (18.2.6.5) | |
%Error% | Error | Error 构造函数 (19.5.1) | |
%ErrorPrototype% | Error.prototype | %Error% 的prototype属性的初始值 | |
%eval% | eval | eval 函数 (18.2.1) | |
%EvalError% | EvalError | EvalError 构造函数 (19.5.5.1) | |
%EvalErrorPrototype% | EvalError.prototype | %EvalError%的prototype属性的初始值 | |
%Float32Array% | Float32Array | Float32Array 构造函数 (22.2) | |
%Float32ArrayPrototype% | Float32Array.prototype | %Float32Array%. 的prototype属性的初始值 | |
%Float64Array% | Float64Array | Float64Array 构造函数 (22.2) | |
%Float64ArrayPrototype% | Float64Array.prototype | %Float64Array% 的prototype属性的初始值 | |
%Function% | Function | Function 构造函数 (19.2.1) | |
%FunctionPrototype% | Function.prototype | %Function% 的prototype属性的初始值 | |
%Generator% | %GeneratorFunction% 的prototype属性的初始值 | ||
%GeneratorFunction% | generator 对象的构造函数(25.2.1) | ||
%GeneratorPrototype% | %Generator% 的prototype属性的初始值 | ||
%Int8Array% | Int8Array | Int8Array 构造函数 (22.2) | |
%Int8ArrayPrototype% | Int8Array.prototype | %Int8Array% 的prototype属性的初始值 | |
%Int16Array% | Int16Array | Int16Array 构造函数 (22.2) | |
%Int16ArrayPrototype% | Int16Array.prototype | %Int16Array% 的prototype属性的初始值 | |
%Int32Array% | Int32Array | Int32Array 构造函数 (22.2) | |
%Int32ArrayPrototype% | Int32Array.prototype | %Int32Array% 的prototype属性的初始值 | |
%isFinite% | isFinite | isFinite 函数 (18.2.2) | |
%isNaN% | isNaN | isNaN 函数 (18.2.3) | |
%IteratorPrototype% | 所有内置的构造器对象直接继承的对象 | ||
%JSON% | JSON | JSON object (24.3) | |
%Map% | Map | Map 构造函数 (23.1.1) | |
%MapIteratorPrototype% | iterator 构造器对象的prototype属性 (23.1.5) | ||
%MapPrototype% | Map.prototype | %Map% 的prototype属性的初始值 | |
%Math% | Math | Math object (20.2) | |
%Number% | Number | Number 构造函数 (20.1.1) | |
%NumberPrototype% | Number.prototype | %Number% 对象的prototype属性 | |
%Object% | Object | Object 构造函数 (19.1.1) | |
%ObjectPrototype% | Object.prototype | %Object%. 的prototype属性的初始值 (19.1.3) | |
%ObjProto_toString% | Object.prototype.toString | %ObjectPrototype% 的toString属性的初始值(19.1.3.6) | |
%ObjProto_valueOf% | Object.prototype.valueOf | %ObjectPrototype% 的valueOf属性的初始值(19.1.3.7) | |
%parseFloat% | parseFloat | parseFloat 函数 (18.2.4) | |
%parseInt% | parseInt | parseInt 函数 (18.2.5) | |
%Promise% | Promise | Promise 构造函数 (25.4.3) | |
%PromisePrototype% | Promise.prototype | %Promise% 的prototype属性的初始值 | |
%Proxy% | Proxy | Proxy 构造函数 (26.2.1) | |
%RangeError% | RangeError | RangeError 构造函数 (19.5.5.2) | |
%RangeErrorPrototype% | RangeError.prototype | %RangeError% 的prototype属性的初始值 | |
%ReferenceError% | ReferenceError | ReferenceError 构造函数 (19.5.5.3) | |
%ReferenceErrorPrototype% | ReferenceError.prototype | %ReferenceError% 的 | prototype属性的初始值 |
%Reflect% | Reflect | Reflect 对象 (26.1) | |
%RegExp% | RegExp | RegExp 构造函数 (21.2.3) | |
%RegExpPrototype% | RegExp.prototype | %RegExp% 的prototype属性的初始值 | |
%Set% | Set | Set 构造函数 (23.2.1) | |
%SetIteratorPrototype% | set 构造器对象的prototype对象 (23.2.5) | ||
%SetPrototype% | Set.prototype | %Set% 的prototype属性的初始值 | |
%String% | String | String 构造函数 (21.1.1) | |
%StringIteratorPrototype% | String构造器对象的prototype属性 (21.1.5) | ||
%StringPrototype% | String.prototype | %String% 的prototype属性的初始值 | |
%Symbol% | Symbol | Symbol 构造函数 (19.4.1) | |
%SyntaxError% | SyntaxError | SyntaxError 构造函数 (19.5.5.4) | |
%SyntaxErrorPrototype% | SyntaxError.prototype | %SyntaxError% 的prototype属性的初始值 | |
%ThrowTypeError% | 一个无条件抛出 %TypeError% 实例的函数对象 | ||
%TypedArray% | typed Array 构造函数的父类 (22.2.1) | ||
%TypedArrayPrototype% | %TypedArray% 的prototype属性的初始值 | ||
%TypeError% | TypeError | TypeError 构造函数 (19.5.5.5) | |
%TypeErrorPrototype% | TypeError.prototype | %TypeError% 的prototype属性的初始值 | |
%Uint8Array% | Uint8Array | Uint8Array 构造函数 (22.2) | |
%Uint8ArrayPrototype% | Uint8Array.prototype | %Uint8Array% 的prototype属性的初始值 | |
%Uint8ClampedArray% | Uint8ClampedArray | Uint8ClampedArray 构造函数 (22.2) | |
%Uint8ClampedArrayPrototype% | Uint8ClampedArray.prototype | %Uint8ClampedArray% 的prototype属性的初始值 | |
%Uint16Array% | Uint16Array | Uint16Array 构造函数 (22.2) | |
%Uint16ArrayPrototype% | Uint16Array.prototype | %Uint16Array% 的prototype属性的初始值 | |
%Uint32Array% | Uint32Array | Uint32Array 构造函数 (22.2) | |
%Uint32ArrayPrototype% | Uint32Array.prototype | %Uint32Array% 的prototype属性的初始值 | |
%URIError% | URIError | URIError 构造函数 (19.5.5.6) | |
%URIErrorPrototype% | URIError.prototype | %URIError% 的prototype属性的初始值 | |
%WeakMap% | WeakMap | WeakMap 构造函数 (23.3.1) | |
%WeakMapPrototype% | WeakMap.prototype | %WeakMap% 的prototype属性的初始值 | |
%WeakSet% | WeakSet | WeakSet 构造函数 (23.4.1) | |
%WeakSetPrototype% | WeakSet.prototype | %WeakSet% 的prototype属性的初始值 |