ToNumber

2018-06-16 15:11 更新

ToNumber 运算符根据下表将其参数转换为数值类型的值:


表12——ToNumber转换
输入类型结果
UndefinedNaN
Null+0
Boolean如果参数是 true,结果为 1。如果参数是 false,此结果为 +0。
Number结果等于输入的参数(不转换)。
String参见下文的文法和注释。
Object应用下列步骤:
  1. 設 原始值 為 ToPrimitive ( 输入参数 , 暗示 数值类型)。
  2. 返回 ToNumber ( 原始值 )。

对字符串类型应用 ToNumber

 对字符串应用 ToNumber 时,对输入字符串应用如下文法。如果此文法无法将字符串解释为「字符串数值常量」的扩展,那么 ToNumber 的结果为 NaN。

 语法

StringNumericLiteral ::: StrWhiteSpaceopt StrWhiteSpaceoptStrNumericLiteral StrWhiteSpaceopt StrWhiteSpace ::: StrWhiteSpaceChar StrWhiteSpaceopt StrWhiteSpaceChar ::: WhiteSpace LineTerminatorStrNumericLiteral ::: StrDecimalLiteral HexIntegerLiteralStrDecimalLiteral ::: StrUnsignedDecimalLiteral + StrUnsignedDecimalLiteral - StrUnsignedDecimalLiteralStrUnsignedDecimalLiteral ::: Infinity DecimalDigits . DecimalDigitsopt ExponentPartopt . DecimalDigits ExponentPartopt DecimalDigits ExponentPartoptDecimalDigits ::: DecimalDigit DecimalDigits DecimalDigit DecimalDigit ::: 以下之一 0 1 2 3 4 5 6 7 8 9 ExponentPart ::: ExponentIndicator SignedInteger ExponentIndicator ::: 以下之一 e E SignedInteger ::: DecimalDigits + DecimalDigits - DecimalDigitsHexIntegerLiteral ::: 0x HexDigit 0X HexDigit HexIntegerLiteral HexDigit HexDigit ::: 以下之一 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F

 需要注意到「字符串数值常量」和 「数值常量」 语法上的不同:

  • 「字符串数值常量」之前和、或之后可以有空白和/或行结束符。
  • 十进制的「字符串数值常量」可有任意位数的 0 在前头。
  • 十进制的「字符串数值常量」可有指示其符号的 + 或 - 前缀。
  • 空的,或只包含空白的「字符串值常量」會被转换为 +0。

 字符串到数字值的转换,大体上类似于判定 数值常量 的数字值,不过有些细节上的不同,所以,这里给出了把字符串数值常量转换为数值类型的值的全部过程。这个值分两步来判定:首先,从字符串数值常量中导出数学值;第二步,以下面所描述的方式对该数学值进行舍入。

  • 「字符串整数常量 ::: [empty]」的数学值是 0。
  • 「字符串整数常量 ::: 串空白」的数学值是 0。
  • 不管有没有空白「字符串整数常量 ::: 串空白 opt 串数值常量 串空白 opt」的数学值是「串数值常量」的数学值
  • 「串数值常量 ::: 串十进制常量」的数学值是「串十进制常量」的数学值
  • 「串数值常量 ::: 十六进制整数常量」的数学值是「十六进制整数常量」的数学值
  • 「串十进制常量 ::: 串无符号整数常量」的数学值是「串无符号整数常量」的数学值
  • 「串十进制常量 ::: + 串无符号整数常量」的数学值是「串无符号整数常量」的数学值。
  • 「串十进制常量 ::: - 串无符号整数常量」的数学值是「串无符号整数常量」的数学值的负数。 (需要注意的是,如果「串无符号整数常量」的数学值是 0, 其负数也是 0。下面中描述的舍入规则会合适地处理小于数学零到浮点数 +0 或 -0 的变换。)
  • 「串无符号整数常量 ::: Infinity」的数学值是 1010000(一个大到会舍入为 +∞ 的值过大的值会返回为 )。
  • 「串无符号整数常量 ::: 十进制数 .」的数学值是「十进制数」的数学值。
  • 「串无符号整数常量 ::: 十进制数 . 十进制数」的数学值是第一个「十进制数」的数学值加(第二个「十进制数」的数学值乘以 10-n),这里的 n 是 the number of characters in the 第二个「十进制数」字符数。
  • 「串无符号整数常量 ::: 十进制数 . 指数部分」的数学值是「十进制数」的数学值乘以 10e, 这里的 e 是「指数部分」的数学值
  • 「串无符号整数常量 ::: 十进制数 . 十进制数 指数部分」的数学值是(第一个「十进制数」的数学值加(第二个「十进制数」的数学值乘以 10-n))乘以 10e,这里的 n 是 第二个「十进制数」中的字符个数,e 是「指数部分」的数学值。
  • 「串无符号整数常量 ::: . 十进制数」的数学值是「十进制数」的数学值乘以 10-n,这里的 n 是「十进制数」中的字符个数。
  • 「串无符号整数常量 ::: . 十进制数 指数部分」的数学值是「十进制数」的数学值乘以 10e-n,这里的 n 是「十进制数」中的字符个数,e 是「指数部分」的数学值
  • 「串无符号整数常量 ::: 十进制数」的数学值是「十进制数」的数学值
  • 「串无符号整数常量 ::: 十进制数 指数部分」的数学值是「十进制数」的数学值乘以 10e,这里的 e 是「指数部分」的数学值
  • 「十进制数 ::: 十进制数字」是「十进制数字」的数学值
  • 「十进制数 ::: 十进制数 十进制数字」的数学值是(「十进制数」的数学值乘以 10)加「十进制数字」的数学值
  • 「指数部分 ::: 幂指示符 有符号整数」的数学值是「有符号整数」的数学值
  • 「有符号整数 ::: 十进制数」的数学值是「十进制数」的数学值
  • 「有符号整数 ::: + 十进制数」的数学值是「十进制数」的数学值
  • 「有符号整数 ::: - 十进制数」是「十进制数」的数学值的负数。
  • 「十进制数字 ::: 0」或「十六进制数字 ::: 0」的数学值是 0。
  • 「十进制数字 ::: 1」或「十六进制数字 ::: 1」的数学值是 1。
  • 「十进制数字 ::: 2」或「十六进制数字 ::: 2」的数学值是 2。
  • 「十进制数字 ::: 3」或「十六进制数字 ::: 3」的数学值是 3。
  • 「十进制数字 ::: 4」或「十六进制数字 ::: 4」的数学值是 4。
  • 「十进制数字 ::: 5」或「十六进制数字 ::: 5」的数学值是 5。
  • 「十进制数字 ::: 6」或「十六进制数字 ::: 6」的数学值是 6。
  • 「十进制数字 ::: 7」或「十六进制数字 ::: 7」的数学值是 7。
  • 「十进制数字 ::: 8」或「十六进制数字 ::: 8」的数学值是 8。
  • 「十进制数字 ::: 9」或「十六进制数字 ::: 9」的数学值是 9。
  • 「十六进制数字 ::: a」或「十六进制数字 ::: A」的数学值是 10。
  • 「十六进制数字 ::: b」或「十六进制数字 ::: B」的数学值是 11。
  • 「十六进制数字 ::: c」或「十六进制数字 ::: C」的数学值是 12。
  • 「十六进制数字 ::: d」或「十六进制数字 ::: D」的数学值是 13。
  • 「十六进制数字 ::: e」或「十六进制数字 ::: E」的数学值是 14。
  • 「十六进制数字 ::: f」或「十六进制数字 ::: F」的数学值是 15。
  • 「十六进制整数常量 ::: 0x 十六进制数字」的数学值是「十六进制数字」的数学值。
  • 「十六进制整数常量 ::: 0X 十六进制数字」的数学值是「十六进制数字」的数学值。
  • 「十六进制整数常量 ::: 十六进制整数常量 十六进制数字」的数学值是(「十六进制整数常量」的数学值乘以 16)加「十六进制数字」的数学值。

 一旦字符串数值常量的数学值被精确地确定,接下来就会被舍入为数值类型的一个值。如果数学值是 0,那么舍入值为 +0,除非字符串数值常量中第一个非空白字符是 ‘-’ — 在这种情况下,舍入值为 -0。否则,舍入值必须是数学值的 数字值 ,除非该常量包括一个「串无符号十进制常量」,且此常量多于 20 位 重要数字 — 在这种情况下,此数字的值是下面两种之一:一是将其 20 位之后的每个重要数字用 0 替换,产生此字符串解析出的数学值的数字值;二是将其 20 位之后的每个有效数字用 0 替换,并在第 20 位重要数字加一,产生此字符串解析出的数学值的数字值 。判断一个数字是否为 重要数字 ,首先它不能是「指数部分」的一部分,且

  • 它不是 0;或
  • 它的左边是一个非零值,右边是一个不在「指数部分」中的非零值。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号