LanguageTypes
ECMAScript语言类型对应于ECMAScript程序员使用ECMAScript语言直接操作的值。
ECMAScript语言类型是Undefined
、Null
、Boolean
、String
、Symbol
、Number
、BigInt
和Object
。
ECMAScript语言值是以ECMAScript语言类型为特征的值。
Undefined Type
Undefined类型恰好有一个值,称为Undefined。任何未分配值的变量都具有Undefined的值。
Null Type
Null类型也只有一个值,称为Null
Boolean Type
布尔类型表示一个具有两个值的逻辑实体,称为true和false。
String Type
字符串类型是零或多个16位Unicode字符序列,最大长度为253 - 1个元素。
字符串类型通常用于表示正在运行的ECMAScript程序中的文本数据,在这种情况下,字符串中的每个元素都被视为UTF-16代码单位值。 每个元素都被视为在序列中占据一个位置。这些位置用非负整数进行索引。 第一个元素(如果有的话)在索引0处,下一个元素(如果有的话)在索引1处,以此等。 字符串的长度是其中的元素数量(即16位值)。空字符串的长度为零,因此不包含任何元素。
更多可见String Object
Symbol Type
符号类型是所有非字符串值的集合,可以用作对象属性的键。
每个可能的符号值都是唯一且不可变的。
每个符号值不可变地包含一个名为[[Description]]
的关联值,该值要么是Undefined
,要么是String
。
Well-Know Symbols
众所周知的符号是内置的符号值,由ES规范的算法明确引用。
它们通常用作属性的键,其值作为ES规范算法的扩展点。除非另有说明,否则众所周知的符号值由所有共享。
在ES规范中,使用@@name
形式的符号来引用一个众所周知的符号,其中“Name”是下表中列出的值之一。
Specification Name | [[Description]] | Value and Purpose |
---|---|---|
@@asyncIterator | "Symbol.asyncIterator" | 返回对象默认AsyncIterator的方法。由for-await-of语句的语义调用。 |
@@hasInstance | "Symbol.hasInstance" | 一种确定构造函数对象是否将对象识别为构造函数实例之一的方法。由instanceof运算符的语义调用。 |
@@isConcatSpreadable | "Symbol.isConcatSpreadable" | 一个布尔值属性,如果为真,则表示对象应由Array.prototype.concat将其扁平化为其数组元素。 |
@@iterator | "Symbol.iterator" | 返回对象默认Iterator的方法。由for-of语句的语义调用。 |
@@match | "Symbol.match" | 将正则表达式与字符串匹配的正则表达式方法。由String.prototype.match方法调用。 |
@@replace | "Symbol.replace" | 返回一个惯例的正则表达式方法,该方法产生正则表达式与字符串的匹配。由String.prototype.matchAll方法调用。 |
@@search | "Symbol.search" | 替换字符串匹配子字符串的正则表达式方法。由String.prototype.replace方法调用。 |
@@species | "Symbol.species" | 函数值属性,用于创建派生对象的构造函数。 |
@@split | "Symbol.split" | 在与正则表达式匹配的索引处拆分字符串的正则表达式方法。由String.prototype.split方法调用。 |
@@toPrimitive | "Symbol.toPrimitive" | 将对象转换为相应原始值的方法。由ToPrimitive抽象操作调用。 |
@@toStringTag | "Symbol.toStringTag" | 用于创建对象的默认字符串描述的字符串值属性。由内置方法Object.prototype.toString访问。 |
@@unscopables | "Symbol.unscopables" | 一个具有对象价值的属性,其自身和继承的属性名称是从关联对象的环境绑定中排除的属性名称。 |
Numberic Types
ECMAScript有两种内置的数字类型:Number和BigInt。
以下抽象操作是在这些数字类型上定义的。“结果”列显示返回类型,并指示是否可能对操作的某些调用返回突然完成。
Operation | Example source | Invoked by the Evaluation semantics of ... | Result |
---|---|---|---|
Number::unaryMinus BigInt::unaryMinus | -x/~x | Unary - Operator | Number/BigInt |
Number::bitwiseNOT BigInt::bitwiseNOT | ~x/~x | Bitwise NOT Operator ( ~ ) | Number/BigInt |
Number::exponentiate BigInt::exponentiate | x ** y | Exponentiation Operator and Math.pow ( base, exponent ) | Number/either a normal completion containing a BigInt or a throw completion |
Number::multiply BigInt::multiply | x * y | x * y Multiplicative Operators | Number/BigInt |
Number::divide BigInt::divide | x / y | Multiplicative Operators | Number/either a normal completion containing a BigInt or a throw completion |
Number::remainder BigInt::remainder | x % y | Multiplicative Operators Number | Number/either a normal completion containing a BigInt or a throw completion |
Number::add BigInt::add | x ++,++ x,x+y | Postfix/Prefix Increment Operator, and The Addition Operator ( + ) | Number/BigInt |
Number::subtract BigInt::subtract | x--,--x, x-y | Postfix/Prefix Increment Operator, and The Subtraction Operator ( - ) | Number/BigInt |
Number::leftShift BigInt::leftShift | x << y | The Left Shift Operator ( << ) Number | Number/BigInt |
Number::signedRightShift BigInt::signedRightShift | x >> y | The Signed Right Shift Operator ( >> ) Number | Number/BigInt |
Number::unsignedRightShift BigInt::unsignedRightShift | x >>> y | The Unsigned Right Shift Operator ( >>> ) Number | Number/BigInt |
Number::unsignedRightShift BigInt::unsignedRightShift | x >>> y | The Unsigned Right Shift Operator ( >>> ) Number | Number/a throw completion |
Number::lessThan BigInt::lessThan | x < = y , x >= y | Relational Operators, via IsLessThan ( x, y, LeftFirst ) | Boolean or undefined (for unordered inputs)/Boolean |
Number::equal BigInt::equal | x == y x!=y | Equality Operators, via IsStrictlyEqual ( x, y ) | Boolean |
Number::sameValue BigInt::sameValue | Object.is(x, y) | Object internal methods, via SameValue ( x, y ), to test exact value equality | Boolean |
Number::sameValueZero BigInt::sameValueZero | [x].includes(y) | Array, Map, and Set methods, via SameValueZero ( x, y ), to test value equality, ignoring the difference between +0𝔽 and -0𝔽 | Boolean |
Number::bitwiseAND BigInt::bitwiseAND | x & y | Binary Bitwise Operators | Number/BigInt |
Number::bitwiseXOR BigInt::bitwiseXOR | x ^ y | Binary Bitwise Operators | Number/BigInt |
Number::bitwiseOR BigInt::bitwiseOR | x | y | Binary Bitwise Operators |
Number::toString BigInt::toString | String(x) | Many expressions and built-in functions | String |
由于数字类型通常不能在不损失精度或截断的情况下进行转换,因此ECMAScript语言在这些类型之间不提供隐式转换。 在调用需要另一种类型的函数时,程序员必须显式调用Number和BigInt函数才能在类型之间进行转换。
Object Type
对象类型的每个实例,也简称为对象,代表属性的集合。 每个属性要么是data property数据属性,要么是accessor property访问器属性