js基本数据类型 BigInt 和 Number 的区别
今天在做LeetCode的一到 “加一” 的題,題目如下
給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。 最高位數字存放在數組的首位, 數組中每個元素只存儲一個數字。 你可以假設除了整數 0 之外,這個整數不會以零開頭。 示例 1: 輸入: [1,2,3] 輸出: [1,2,4] 解釋: 輸入數組表示數字 123。 示例 2: 輸入: [4,3,2,1] 輸出: [4,3,2,2] 解釋: 輸入數組表示數字 4321。
我的代碼是這樣的,這還是優化過的
var plusOne = function(digits) {
for (let i = digits.length - 1; i >= 0; i--) {
if (digits[i] === 9) {
digits[i] = 0
} else {
digits[i]++
break
}
}
return (digits[0] === 0) ? [...[1], ...digits] : digits
};
后來在答案區看到一位大神的代碼只有一行
const plusOne = digits => {
return (BigInt(digits.join('')) + 1n).toString().split('');
};
趕緊學習一下,
這個方法很巧妙,是把數組轉化為數字計算后再轉回數組
方法學習到了,但是為什么不能用Number呢,我測試了一下,當數字過大時,Number的問題就出現了
var plusOne1 = function(digits) {
(Number(digits.join(''))+1).toString().split('')
return digits
};
var plusOne2 = digits => {
return (BigInt(digits.join('')) + 1n).toString().split('');
};
plusOne1([6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3])
// [6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,0,0,0]
plusOne2([6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3])
// [6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,4]
再來下面的就更清晰了
Number([6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3].join('')) = 6145390195186705000
BigInt([6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3].join('')) = 6145390195186705543n
為什么Number不行,BigInt就可以呢,我們來看一下BigInt的介紹
在JavaScript中的基本數據類Number是雙精度浮點數,它可以表示的最大安全范圍是正負9007199254740991,也就是2的53次方減一, 比253大的所有數字則可以使用BigInt表達。
BigInt是JavaScript中的一個新的原始類型,可以用任意精度表示整數。使用BigInt,即使超出JavaScriptNumber的安全整數限制,也可以安全地存儲和操作大整數。
chrome 67+開始支持BigInt。可以這樣定義一個BigInt變量:在一個整數字面量后面加n,如:10n,或者調用函數BigInt()。
要創建一個BigInt,在數字后面添加n后綴即可,例如,123變成123n。全局BigInt(number)函數可以用來將Number轉換成BigInt。換句話說,BigInt(123) === 123n。
BigInt(value)。 // value是創建對象的數值。可以是字符串或者整數。
const theBiggestInt = 9007199254740991n;
const alsoHuge = BigInt(9007199254740991);
// ↪ 9007199254740991n
const hugeButString = BigInt('9007199254740991');
// ↪ 9007199254740991n
它在某些方面類似于Number,但是也有幾個關鍵的不同點:不能和Math對象中的方法一起使用;不能和任何Number實例混合運算。
好了,現在你知道他們的區別在哪里了嗎?如果工作中有對超大數字的計算,一定記得使用BigInt確保準確無誤哦!
總結
以上是生活随笔為你收集整理的js基本数据类型 BigInt 和 Number 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何进行大规模在线数据迁移(来自Stri
- 下一篇: 一般纳税人和小规模纳税人哪个好?哪个更划