第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

TypeScript BigInt

本節(jié)介紹的 bigint 數(shù)據(jù)類型是用來表示那些已經(jīng)超出了 number 類型最大值的整數(shù)值,對于總是被詬病的整數(shù)溢出問題,使用了 bigint 后將完美解決。

1. 慕課解釋

bigint 是一種基本數(shù)據(jù)類型(primitive data type)。

JavaScript 中可以用 Number 表示的最大整數(shù)為 2^53 - 1,可以寫為 Number.MAX_SAFE_INTEGER。如果超過了這個界限,可以用 BigInt來表示,它可以表示任意大的整數(shù)。

2. 語法

在一個整數(shù)字面量后加 n 的方式定義一個 BigInt,如:10n 或者調(diào)用函數(shù) BigInt()

const theBiggestInt: bigint = 9007199254740991n
const alsoHuge: bigint = BigInt(9007199254740991)
const hugeString: bigint = BigInt("9007199254740991")

theBiggestInt === alsoHuge // true
theBiggestInt === hugeString // true

代碼解釋:

第 1-3 行,分別是三種表達(dá)整數(shù) 9007199254740991 的方式,方式不同含義相同,所以完全相等。

BigIntNumber 的不同點(diǎn):

  • BigInt 不能用于 Math 對象中的方法。
  • BigInt 不能和任何 Number 實(shí)例混合運(yùn)算,兩者必須轉(zhuǎn)換成同一種類型。
  • BigInt 變量在轉(zhuǎn)換為 Number 變量時可能會丟失精度。
const biggest: number = Number.MAX_SAFE_INTEGER

const biggest1: number = biggest + 1
const biggest2: number = biggest + 2

biggest1 === biggest2 // true 超過精度

代碼解釋:

第 1 行,聲明了一個 number 類型最大值的變量 biggest,對于 number 類型來說,這個就是最大精度。

第 3-4 行,最大精度就是這個容器已經(jīng)完全滿了,無論往上加多少都會溢出,所以這兩個值是相等的。

而使用 BigInt:

const biggest: bigint = BigInt(Number.MAX_SAFE_INTEGER)

const biggest1: bigint = biggest + 1n
const biggest2: bigint = biggest + 2n

biggest1 === biggest2 // false

代碼解釋:

第 1 行,聲明了一個 bigint 類型的變量 biggest。

第 3-4 行,bigint 類型就是用來表示那些已經(jīng)超出了 number 類型最大值的整數(shù)值,也就是這個容器還沒滿,在此基礎(chǔ)上加上兩個不同的值,其結(jié)果不相等。

3. 類型信息

使用 typeof 檢測類型時,BigInt 對象返回 bigint:

typeof 10n === 'bigint'         // true
typeof BigInt(10) === 'bigint'  // true

typeof 10 === 'number'          // true
typeof Number(10) === 'number'  // true

代碼解釋:

typeof 操作符返回一個字符串,表示未經(jīng)計(jì)算的操作數(shù)的類型,用來判斷基礎(chǔ)數(shù)據(jù)類型。

第 1-2 行,兩個書寫方式都是 bigint 類型,所以相等。

第 4-5 行,兩種書寫方式都是 number 類型,所以相等。

4. 運(yùn)算

BigInt 可以正常使用 +-、*、/、**、% 符號進(jìn)行運(yùn)算:

const previousMaxSafe: bigint = BigInt(Number.MAX_SAFE_INTEGER)  // 9007199254740991n

const maxPlusOne: bigint = previousMaxSafe + 1n                  // 9007199254740992n

const multi: bigint = previousMaxSafe * 2n                       // 18014398509481982n

const subtr: bigint = multi – 10n                                // 18014398509481972n

const mod: bigint = multi % 10n                                  // 2n

const bigN: bigint = 2n ** 54n                                   // 18014398509481984n

Tip: 當(dāng)使用 / 操作符時,會向下取整,不會返回小數(shù)部分:

const divided: bigint = 5n / 2n                                   // 2n, not 2.5n

5. 比較 與 條件

NumberBigInt 可以進(jìn)行比較:

0n === 0 // false

0n == 0 // true

1n < 2  // true

2n > 1  // true

2 > 2   // false

2n > 2  // false

2n >= 2 // true

條件判斷:

if (0n) {
  console.log('條件成立!');
} else {
  console.log('條件不成立!'); // 輸出結(jié)果
}

0n || 10n    // 10n

0n && 10n    // 0n

Boolean(0n)  // false

Boolean(10n) // true

!10n         // false

!0n          // true

代碼解釋:

后面會有一節(jié)介紹 Truthy 與 Falsy,這里先簡單提下。除了明確的 true 和 false 兩個 boolean 類型外,JavaScript 可以在需要用到布爾類型值的上下文中使用強(qiáng)制類型轉(zhuǎn)換將值轉(zhuǎn)換為布爾值。

比如 0 是假,10 是真。那么,同樣的,0n 是假,10n 是真。

6. 小結(jié)

本小節(jié)介紹了 BigInt 類型相關(guān)知識,由于在 NumberBigInt 之間進(jìn)行轉(zhuǎn)換會損失精度,建議:

  • 不要在兩種類型之間進(jìn)行相互轉(zhuǎn)換。
  • 僅在值可能大于 2^53 - 1 時使用 BigInt