日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

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

發布時間:2024/1/3 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 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 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。