JavaScript 數值型別特性
JavaScript 數值型別特性
以下先附上經典圖
number 型別
這就是我們常見的數值型別
let a = 100; |
Number 物件
Number 的物件,他是在 js run 起來就存在的物件被放在根物件底下window.Number
let num = new Number(100); |
可以看到 num print 出來是一個物件,想要取得 PrimitiveValue 裡的數值可以使用num.valueOf()
,在這裏面的數值被創建出來後是不易更改的。
字串轉成數值
字串轉型成數值
let num = Number("100"); // 轉型成功 |
也可以使用+觸發型別自動轉換
let num = +"100"; // 100 |
parseInt()函式
parseInt()可以轉換型別變成整數
只要他遇到看不懂的就會變成 NaN
parseInt("100"); // 100 |
parseInt()的第二個參數可以設定是幾進制轉換,預設是十進制
// 二進制 |
注意
請勿使用以下寫法,parseInt()的第一個參數是放 String 型別,所以才有以下錯誤,因為當小數到達一定程度後,會自動轉成科學記號表示法,js 會把他轉成字串再進行 parse,導致了以下錯誤
parseInt(0.001); // 0 |
正確寫法
parseInt("0.0000001"); // 0 |
數值轉成字串
數值轉成字串可以使用 toString()函式,函式裡面參數可以設定進制的轉換
100.toString(); // 會報錯 |
NaN
NaN,也就是 not a number
NaN 是數值型別,但是 NaN 不等於 NaN,跟 NaN 計算的數值結果都會變成 NaN。
typeof NaN; // 'number' |
當要判斷是否是 NaN 時可以使用
let num = NaN; |
整數運算特性
最大值和最小值
JavaScript 是採用浮點數運算系統(到一定位數會有精準度問題)
先來查看最大值和最小值,這裡的最小值是大於 0 的最小值哦
// 最大值 |
可以使用 toString(2)轉換最大值來查看,可以發現整數在大於某一個數之後,就會變得沒那麼精準
Number.MAX_VALUE.toString(2); |
最大安全整數
再來介紹最大安全整數,可以發現使用最大值 toString(2)後有 1 的位數去做 parseInt 轉換會得到與最大安全整數相同的結果。
最大安全整數會等於2**53-1
Number.MAX_SAFE_INTEGER; // 9007199254740991 |
在超過最大安全數後的計算會有誤差的問題,所以盡量不要這麼做
Number.MAX_SAFE_INTEGER + 1; // 9007199254740992 |
無限大數值 Infinity
Infinity 也是數值,也就是無限大數值,甚麼時候會跑出 Infinity 呢,來查看以下範例
Infinity - // 無限大 |
利用 Infinity 去做其他數值運算都會是 Infinity,除了使用 Infinity 和 Infinity 去做運算會變成 NaN。
let num = Infinity / 100; // Infinity |
無限大判斷,無限大會等於無限大
Number.POSITIVE_INFINITY == Infinity; // true |
BigInt
bigint 就是超大整數
那要如何使用呢? 只要在數值後面加上一個 n,bigint 只能跟 bigint 做計算,否則會出錯
let num = 123n; |
浮點數計算
0.1 加上 0.2 不等於 0.3,是因為 javascript 使用Floating Point Math,導致無法整除,所以使用的時候要多加留意
0.1 + 0.2 == 0.3; // false |