1. 程式人生 > >JavaScript教程筆記(3)-數值

JavaScript教程筆記(3)-數值

整數和浮點數

JavaScript內部,所有數字都是以64位浮點數形式儲存,即使整數也是如此。所以,1與1.0是相等的,是同一個數。

1 === 1.0 // true

也就是說,JavaScript 底層根本沒有整數,所有數字都是小數(64位浮點數)。如果某些運算一定要整數,則JavaScript自動把64位浮點數轉換為32位整數,再進行運算。由於浮點數不是精確的值,所以涉及小數的比較和運算要特別小心。如:

0.1 + 0.2 === 0.3 // false
0.3 / 0.1  // 2.99999
(0.3 - 0.2) === (0.2 - 0.1) // false

數值範圍

根據標準,64位浮點數的指數部分的長度是11個二進位制位,意味著指數部分的最大值是2047(2的11次方減1)。也就是說,64位浮點數的指數部分的值最大為2047,分出一半表示負數,則 JavaScript 能夠表示的數值範圍為2的1024次方到2的-1023次方(開區間),超出這個範圍的數無法表示。

JavaScript 提供Number物件的 MAX_VALUE 和 MIN_VALUE 屬性,返回可以表示的具體的最大值和最小值。

Number.MAX_VALUE // 1.7976931348623157e+308
Number.MIN_VALUE // 5e-324

數值的進位制

JavaScript 對整數提供四種進位制的表示方法:十進位制、十六進位制、八進位制、二進位制。

  • 十進位制:沒有前導0的數值。
  • 八進位制:有字首0o或0O的數值,或者有前導0、且只用到0-7的八個阿拉伯數字的數值。
  • 十六進位制:有字首0x或0X的數值。
  • 二進位制:有字首0b或0B的數值。

NaN

NaN是 JavaScript 的特殊值,表示“非數字”(Not a Number),主要出現在將字串解析成數字出錯的場合。

5 - 'x' // NaN

上面程式碼執行時,會自動將字串x轉為數值,但是由於x不是數值,所以最後得到結果為NaN,表示它是“非數字”(NaN)。

0除以0也會得到NaN。

0 / 0 // NaN

需要注意的是,NaN不是獨立的資料型別,而是一個特殊數值,它的資料型別依然屬於Number,使用typeof運算子可以看得很清楚。

typeof NaN // 'number'

Infinity

Infinity表示“無窮”,用來表示兩種場景。一種是一個正的數值太大,或一個負的數值太小,無法表示;另一種是非0數值除以0,得到Infinity。

// 場景一
Math.pow(2, 1024) // Infinity

// 場景二
0 / 0 // NaN
1 / 0 // Infinity