ToNumber 運算符根據(jù)下表將其參數(shù)轉換為數(shù)值類型的值:
表12——ToNumber轉換
輸入類型 | 結果 |
---|
Undefined | NaN |
Null | +0 |
Boolean | 如果參數(shù)是 true,結果為 1。如果參數(shù)是 false,此結果為 +0。 |
Number | 結果等于輸入的參數(shù)(不轉換)。 |
String | 參見下文的文法和注釋。 |
Object | 應用下列步驟:- 設 原始值 為
ToPrimitive ( 輸入?yún)?shù) , 暗示 數(shù)值類型)。 - 返回
ToNumber ( 原始值 )。
|
對字符串類型應用 ToNumber
對字符串應用 ToNumber 時,對輸入字符串應用如下文法。如果此文法無法將字符串解釋為「字符串數(shù)值常量」的擴展,那么 ToNumber 的結果為 NaN。
語法
StringNumericLiteral ::: StrWhiteSpaceopt StrWhiteSpaceoptStrNumericLiteral StrWhiteSpaceopt
StrWhiteSpace ::: StrWhiteSpaceChar StrWhiteSpaceopt
StrWhiteSpaceChar ::: WhiteSpace LineTerminator
StrNumericLiteral ::: StrDecimalLiteral HexIntegerLiteral
StrDecimalLiteral ::: StrUnsignedDecimalLiteral + StrUnsignedDecimalLiteral - StrUnsignedDecimalLiteral
StrUnsignedDecimalLiteral ::: Infinity DecimalDigits . DecimalDigitsopt ExponentPartopt . DecimalDigits ExponentPartopt DecimalDigits ExponentPartopt
DecimalDigits ::: DecimalDigit DecimalDigits DecimalDigit
DecimalDigit ::: 以下之一 0 1 2 3 4 5 6 7 8 9
ExponentPart ::: ExponentIndicator SignedInteger
ExponentIndicator ::: 以下之一 e E
SignedInteger ::: DecimalDigits + DecimalDigits - DecimalDigits
HexIntegerLiteral ::: 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
需要注意到「字符串數(shù)值常量」和 「數(shù)值常量」 語法上的不同:
- 「字符串數(shù)值常量」之前和、或之后可以有空白和/或行結束符。
- 十進制的「字符串數(shù)值常量」可有任意位數(shù)的 0 在前頭。
- 十進制的「字符串數(shù)值常量」可有指示其符號的 + 或 - 前綴。
- 空的,或只包含空白的「字符串值常量」會被轉換為 +0。
字符串到數(shù)字值的轉換,大體上類似于判定 數(shù)值常量 的數(shù)字值,不過有些細節(jié)上的不同,所以,這里給出了把字符串數(shù)值常量轉換為數(shù)值類型的值的全部過程。這個值分兩步來判定:首先,從字符串數(shù)值常量中導出數(shù)學值;第二步,以下面所描述的方式對該數(shù)學值進行舍入。
- 「字符串整數(shù)常量 ::: [empty]」的數(shù)學值是 0。
- 「字符串整數(shù)常量 ::: 串空白」的數(shù)學值是 0。
- 不管有沒有空白「字符串整數(shù)常量 ::: 串空白 opt 串數(shù)值常量 串空白 opt」的數(shù)學值是「串數(shù)值常量」的數(shù)學值
- 「串數(shù)值常量 ::: 串十進制常量」的數(shù)學值是「串十進制常量」的數(shù)學值
- 「串數(shù)值常量 ::: 十六進制整數(shù)常量」的數(shù)學值是「十六進制整數(shù)常量」的數(shù)學值
- 「串十進制常量 ::: 串無符號整數(shù)常量」的數(shù)學值是「串無符號整數(shù)常量」的數(shù)學值
- 「串十進制常量 ::: + 串無符號整數(shù)常量」的數(shù)學值是「串無符號整數(shù)常量」的數(shù)學值。
- 「串十進制常量 ::: - 串無符號整數(shù)常量」的數(shù)學值是「串無符號整數(shù)常量」的數(shù)學值的負數(shù)。 (需要注意的是,如果「串無符號整數(shù)常量」的數(shù)學值是 0, 其負數(shù)也是 0。下面中描述的舍入規(guī)則會合適地處理小于數(shù)學零到浮點數(shù) +0 或 -0 的變換。)
- 「串無符號整數(shù)常量 ::: Infinity」的數(shù)學值是 1010000(一個大到會舍入為 +∞ 的值過大的值會返回為 )。
- 「串無符號整數(shù)常量 ::: 十進制數(shù) .」的數(shù)學值是「十進制數(shù)」的數(shù)學值。
- 「串無符號整數(shù)常量 ::: 十進制數(shù) . 十進制數(shù)」的數(shù)學值是第一個「十進制數(shù)」的數(shù)學值加(第二個「十進制數(shù)」的數(shù)學值乘以 10-n),這里的 n 是 the number of characters in the 第二個「十進制數(shù)」字符數(shù)。
- 「串無符號整數(shù)常量 ::: 十進制數(shù) . 指數(shù)部分」的數(shù)學值是「十進制數(shù)」的數(shù)學值乘以 10e, 這里的 e 是「指數(shù)部分」的數(shù)學值
- 「串無符號整數(shù)常量 ::: 十進制數(shù) . 十進制數(shù) 指數(shù)部分」的數(shù)學值是(第一個「十進制數(shù)」的數(shù)學值加(第二個「十進制數(shù)」的數(shù)學值乘以 10-n))乘以 10e,這里的 n 是 第二個「十進制數(shù)」中的字符個數(shù),e 是「指數(shù)部分」的數(shù)學值。
- 「串無符號整數(shù)常量 ::: . 十進制數(shù)」的數(shù)學值是「十進制數(shù)」的數(shù)學值乘以 10-n,這里的 n 是「十進制數(shù)」中的字符個數(shù)。
- 「串無符號整數(shù)常量 ::: . 十進制數(shù) 指數(shù)部分」的數(shù)學值是「十進制數(shù)」的數(shù)學值乘以 10e-n,這里的 n 是「十進制數(shù)」中的字符個數(shù),e 是「指數(shù)部分」的數(shù)學值
- 「串無符號整數(shù)常量 ::: 十進制數(shù)」的數(shù)學值是「十進制數(shù)」的數(shù)學值
- 「串無符號整數(shù)常量 ::: 十進制數(shù) 指數(shù)部分」的數(shù)學值是「十進制數(shù)」的數(shù)學值乘以 10e,這里的 e 是「指數(shù)部分」的數(shù)學值
- 「十進制數(shù) ::: 十進制數(shù)字」是「十進制數(shù)字」的數(shù)學值
- 「十進制數(shù) ::: 十進制數(shù) 十進制數(shù)字」的數(shù)學值是(「十進制數(shù)」的數(shù)學值乘以 10)加「十進制數(shù)字」的數(shù)學值
- 「指數(shù)部分 ::: 冪指示符 有符號整數(shù)」的數(shù)學值是「有符號整數(shù)」的數(shù)學值
- 「有符號整數(shù) ::: 十進制數(shù)」的數(shù)學值是「十進制數(shù)」的數(shù)學值
- 「有符號整數(shù) ::: + 十進制數(shù)」的數(shù)學值是「十進制數(shù)」的數(shù)學值
- 「有符號整數(shù) ::: - 十進制數(shù)」是「十進制數(shù)」的數(shù)學值的負數(shù)。
- 「十進制數(shù)字 ::: 0」或「十六進制數(shù)字 ::: 0」的數(shù)學值是 0。
- 「十進制數(shù)字 ::: 1」或「十六進制數(shù)字 ::: 1」的數(shù)學值是 1。
- 「十進制數(shù)字 ::: 2」或「十六進制數(shù)字 ::: 2」的數(shù)學值是 2。
- 「十進制數(shù)字 ::: 3」或「十六進制數(shù)字 ::: 3」的數(shù)學值是 3。
- 「十進制數(shù)字 ::: 4」或「十六進制數(shù)字 ::: 4」的數(shù)學值是 4。
- 「十進制數(shù)字 ::: 5」或「十六進制數(shù)字 ::: 5」的數(shù)學值是 5。
- 「十進制數(shù)字 ::: 6」或「十六進制數(shù)字 ::: 6」的數(shù)學值是 6。
- 「十進制數(shù)字 ::: 7」或「十六進制數(shù)字 ::: 7」的數(shù)學值是 7。
- 「十進制數(shù)字 ::: 8」或「十六進制數(shù)字 ::: 8」的數(shù)學值是 8。
- 「十進制數(shù)字 ::: 9」或「十六進制數(shù)字 ::: 9」的數(shù)學值是 9。
- 「十六進制數(shù)字 ::: a」或「十六進制數(shù)字 ::: A」的數(shù)學值是 10。
- 「十六進制數(shù)字 ::: b」或「十六進制數(shù)字 ::: B」的數(shù)學值是 11。
- 「十六進制數(shù)字 ::: c」或「十六進制數(shù)字 ::: C」的數(shù)學值是 12。
- 「十六進制數(shù)字 ::: d」或「十六進制數(shù)字 ::: D」的數(shù)學值是 13。
- 「十六進制數(shù)字 ::: e」或「十六進制數(shù)字 ::: E」的數(shù)學值是 14。
- 「十六進制數(shù)字 ::: f」或「十六進制數(shù)字 ::: F」的數(shù)學值是 15。
- 「十六進制整數(shù)常量 ::: 0x 十六進制數(shù)字」的數(shù)學值是「十六進制數(shù)字」的數(shù)學值。
- 「十六進制整數(shù)常量 ::: 0X 十六進制數(shù)字」的數(shù)學值是「十六進制數(shù)字」的數(shù)學值。
- 「十六進制整數(shù)常量 ::: 十六進制整數(shù)常量 十六進制數(shù)字」的數(shù)學值是(「十六進制整數(shù)常量」的數(shù)學值乘以 16)加「十六進制數(shù)字」的數(shù)學值。
一旦字符串數(shù)值常量的數(shù)學值被精確地確定,接下來就會被舍入為數(shù)值類型的一個值。如果數(shù)學值是 0,那么舍入值為 +0,除非字符串數(shù)值常量中第一個非空白字符是 ‘-’ — 在這種情況下,舍入值為 -0。否則,舍入值必須是數(shù)學值的 數(shù)字值 ,除非該常量包括一個「串無符號十進制常量」,且此常量多于 20 位 重要數(shù)字 — 在這種情況下,此數(shù)字的值是下面兩種之一:一是將其 20 位之后的每個重要數(shù)字用 0 替換,產生此字符串解析出的數(shù)學值的數(shù)字值;二是將其 20 位之后的每個有效數(shù)字用 0 替換,并在第 20 位重要數(shù)字加一,產生此字符串解析出的數(shù)學值的數(shù)字值
。判斷一個數(shù)字是否為 重要數(shù)字 ,首先它不能是「指數(shù)部分」的一部分,且
- 它不是 0;或
- 它的左邊是一個非零值,右邊是一個不在「指數(shù)部分」中的非零值。
更多建議: