日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

js基本数据类型 BigInt 和 Number 的区别

發(fā)布時間:2024/1/3 43 生活家
生活随笔 收集整理的這篇文章主要介紹了 js基本数据类型 BigInt 和 Number 的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天在做LeetCode的一到 “加一” 的題,題目如下

給定一個由整數(shù)組成的非空數(shù)組所表示的非負(fù)整數(shù),在該數(shù)的基礎(chǔ)上加一。

最高位數(shù)字存放在數(shù)組的首位, 數(shù)組中每個元素只存儲一個數(shù)字。

你可以假設(shè)除了整數(shù) 0 之外,這個整數(shù)不會以零開頭。

示例 1:

輸入: [1,2,3]
輸出: [1,2,4]
解釋: 輸入數(shù)組表示數(shù)字 123。
示例 2:

輸入: [4,3,2,1]
輸出: [4,3,2,2]
解釋: 輸入數(shù)組表示數(shù)字 4321。

我的代碼是這樣的,這還是優(yōu)化過的

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
};

后來在答案區(qū)看到一位大神的代碼只有一行

const plusOne = digits => {
  return (BigInt(digits.join('')) + 1n).toString().split('');
};

趕緊學(xué)習(xí)一下,

這個方法很巧妙,是把數(shù)組轉(zhuǎn)化為數(shù)字計算后再轉(zhuǎn)回數(shù)組

方法學(xué)習(xí)到了,但是為什么不能用Number呢,我測試了一下,當(dāng)數(shù)字過大時,Number的問題就出現(xiàn)了

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中的基本數(shù)據(jù)類Number是雙精度浮點(diǎn)數(shù),它可以表示的最大安全范圍是正負(fù)9007199254740991,也就是2的53次方減一, 比253大的所有數(shù)字則可以使用BigInt表達(dá)。

BigInt是JavaScript中的一個新的原始類型,可以用任意精度表示整數(shù)。使用BigInt,即使超出JavaScriptNumber的安全整數(shù)限制,也可以安全地存儲和操作大整數(shù)。

chrome 67+開始支持BigInt。可以這樣定義一個BigInt變量:在一個整數(shù)字面量后面加n,如:10n,或者調(diào)用函數(shù)BigInt()

要創(chuàng)建一個BigInt,在數(shù)字后面添加n后綴即可,例如,123變成123n。全局BigInt(number)函數(shù)可以用來將Number轉(zhuǎn)換成BigInt。換句話說,BigInt(123) === 123n

BigInt(value)。   
//  value是創(chuàng)建對象的數(shù)值。可以是字符串或者整數(shù)。
const theBiggestInt = 9007199254740991n;

const alsoHuge = BigInt(9007199254740991);
// ↪ 9007199254740991n

const hugeButString = BigInt('9007199254740991');
// ↪ 9007199254740991n

它在某些方面類似于Number,但是也有幾個關(guān)鍵的不同點(diǎn):不能和Math對象中的方法一起使用;不能和任何Number實(shí)例混合運(yùn)算。

好了,現(xiàn)在你知道他們的區(qū)別在哪里了嗎?如果工作中有對超大數(shù)字的計算,一定記得使用BigInt確保準(zhǔn)確無誤哦!

總結(jié)

以上是生活随笔為你收集整理的js基本数据类型 BigInt 和 Number 的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。