Skip to content

Commit

Permalink
Добавляет доку про BigInt (#5526)
Browse files Browse the repository at this point in the history
Co-authored-by: Tatiana Fokina <[email protected]>
  • Loading branch information
ra1nbow1 and TatianaFokina authored Oct 23, 2024
1 parent 17431af commit c00d713
Showing 1 changed file with 47 additions and 6 deletions.
53 changes: 47 additions & 6 deletions js/bigint/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,20 @@
title: "Большое целое"
description: "В математике числа бесконечны, а в программировании — нет. Если число не влезает в стандартный `number`, то есть его старший брат."
authors:
- doka-dog
- ra1nbow1
related:
- js/number
- js/typecasting
- tools/json
tags:
- doka
- placeholder
---

## Кратко

Тип большого целого `BigInt` — примитивный тип, который представляет целые числа больше 2<sup>53</sup>-1. Эти числа уже не помещаются в стандартный [примитив «число»](/js/number/).

Этот тип может использоваться для работы с произвольно большими целыми числами.
Этот тип используют для работы с произвольно большими целыми числами: идентификаторами, криптографическими ключами и другими данными, где требуется высокая точность.

## Как пишется

Expand All @@ -34,9 +33,9 @@ const biggy = 9997000254740991n
const alsoBig = BigInt(9997000254999999)
```

Для `BigInt` определены операции сложения `+`, вычитания `-`, умножения `*`, взятия остатка от деления `%`, возведение в степень `**`.
`BigInt` поддерживает, например, операции сложения `+`, вычитания `-`, умножения `*`, взятия остатка от деления `%`, возведения в степень `**`.

Операция деления `/` также работает, но дробная часть будет отброшена:
Операция деления `/` также работает, но дробная часть отбросится:

```js
const seven = 7n
Expand All @@ -48,6 +47,48 @@ console.log(seven / five)

<aside>

☝️ `BigInt` не сериализуется в [JSON](/tools/json/). Это усложняет использование этого типа данных в задачах взаимодействия с сервером.
☝️ `BigInt` не сериализуется в [JSON](/tools/json/), то есть не переводится в последовательность битов. Это усложняет использование данного типа данных в задачах взаимодействия с сервером.

</aside>

### Преобразование типов

В операциях `BigInt` невозможно использовать напрямую с обычными числами типа `number`: это приведёт к ошибке.

```js
const biggy = 10n
const number = 5

console.log(biggy + number)
// Uncaught TypeError: Cannot mix BigInt and other types,
// use explicit conversions
```

Чтобы провести операции между `BigInt` и обычными числами, их нужно явно преобразовать. Например:

```js
const biggy = 10n
const number = 5

console.log(biggy + BigInt(number))
// 15n

console.log(Number(biggy) + number)
// 15
```

### Ограничения

**Нет поддержки дробных чисел**. `BigInt` работает только с целыми числами. Дробные числа нельзя использовать с этим типом данных.

**Ограниченная поддержка в браузерах**. Хотя `BigInt` поддерживается большинством браузеров, старые версии могут не поддерживать этот тип.

В `BigInt` не поддерживаются операции [унарного плюса](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unary_plus) и [сдвига битов вправо](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unsigned_right_shift).

## Подсказки

💡 Используйте `BigInt`, когда работаете с числами, которые превышают максимальное безопасное целое значение в JavaScript — 2<sup>53</sup>-1.

💡 Продолжайте использовать тип `number` для стандартных вычислений с небольшими числами. Этот тип занимает меньше памяти и более эффективен в операциях.

💡 Проверяйте поддержку `BigInt` в средах, где используется ваш код. Так избежите неожиданных ошибок.

0 comments on commit c00d713

Please sign in to comment.