引言 JavaScript不區分整數值和浮點數值,全部使用浮點數值表示。當一個數字直接出現在JavaScript程式中,我們稱之為數字直接量(numeric litertal)。JavaScript支持多種格式的數字直接量。 整型直接量 在JavaScript程式中,用一個程式序列表示一個十進位整數 ...
引言
JavaScript不區分整數值和浮點數值,全部使用浮點數值表示。當一個數字直接出現在JavaScript程式中,我們稱之為數字直接量(numeric litertal)。JavaScript支持多種格式的數字直接量。
整型直接量
在JavaScript程式中,用一個程式序列表示一個十進位整數。除了十進位的整型直接量,JavaScript同樣能識別十六進位(以16為基數)值(以“0x”和“0X”為首碼)。
浮點型直接量
浮點型直接量可以含有小數點,它們採用的是傳統的實數寫法。一個實數由整數部分、小數點和小數部分組成。同時支持指數記數法表示浮點型直接量。
JavaScript中的算術運算
JavaScript程式是使用語言本身提供的算術運算符來進行數字運算的。這些運算符包括加法運算符(+)、減法運算符(-)、乘法運算符(*)、除法運算符(/)和求餘(求整除後的餘數)運算符(%)。JavaScrip中的算術運算在溢出(overflow)、下溢(underflow)或被零整除時不會報錯。
溢出
當數字運算結果超過了JavaScript所能表示的數字上限(溢出),結果為一個特殊的無窮大(infinity)值,在JavaScript中以Infinity表示。同樣,當負數的值超過了JavaScript所能表示的負數範圍,結果為負無窮大,JavaScript中以-Infinity表示。無窮大值的行為特性和我們所期望的是一致的:基於它們的加、減、乘和除運算結果還是無窮大值(保留其正負號)。
下溢
下溢是當運算結果無限接近於零並比JavaScript能表示的最小值還小的時候發生的一種情形。這種情況下,JavaScript將會返回0。當一個負數發生下溢時,JavaScript返回一個特殊的值“負零”。這個值(負零)幾乎和正常的完全一樣,但是很少用到。
被零整除
被零整除在JavaScript並不報錯:它只是簡單的返回無窮大(Infinity)或負無窮大(-Infinity)。但是有一個例外,零除以零是沒有意義的,這種整除運算結果也是一個非數字(not-a-number)值,用NaN表示。無窮大除以無窮大、給任意負數作開方運算或者算術運算符與不是數字或無法轉換為數字的操作數一起使用時都將會返回NaN。
Infinity和NaN
JavaScript預定義了全局變數Infinity和NaN,用來表示正無窮大和非數字值。在ECMScript3中,這兩個值是可讀/寫的,並可修改。ECMAScript5修正了這個錯誤,將它們定義為只讀的。
特殊情況
- JavaScript中的非數字值都有一點特殊:它和任何值都不相等,包括自身。如判斷變數x是否是NaN,應當使用x!=x來判斷,當且僅當x為NaN的時候,表達式的結果才為true。
- 負零值同樣有些特殊,它和正零值是相等的。這意味這兩個值幾乎一模一樣的,除了作為除數之外:零被除得到正無窮大,負零被除得到負無窮大。
二進位浮點數和四捨五入錯誤
實數有無數個,但是JavaScript通過浮點數的形式只能表示其中有限的個數(確切地說是1843 7736 8744 5481 0627個)。也就是說,當在JavaScript中使用實數的時候,常常只是真實值的一個近似表示。