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