Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавляет доку про BigInt #5526

Merged
merged 6 commits into from
Oct 23, 2024
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 36 additions & 4 deletions js/bigint/index.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@

---
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,7 +34,7 @@ const biggy = 9997000254740991n
const alsoBig = BigInt(9997000254999999)
```

Для `BigInt` определены операции сложения `+`, вычитания `-`, умножения `*`, взятия остатка от деления `%`, возведение в степень `**`.
Для `BigInt` определены операции сложения `+`, вычитания `-`, умножения `*`, взятия остатка от деления `%`, возведения в степень `**`.
ra1nbow1 marked this conversation as resolved.
Show resolved Hide resolved
TatianaFokina marked this conversation as resolved.
Show resolved Hide resolved

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

Expand All @@ -51,3 +51,35 @@ console.log(seven / five)
☝️ `BigInt` не сериализуется в [JSON](/tools/json/). Это усложняет использование этого типа данных в задачах взаимодействия с сервером.

</aside>

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

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

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

console.log(biggy + number) // Ошибка
```

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

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

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

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

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

## Советы

- Используйте `BigInt`, когда нужно работать с числами, которые превышают максимальное безопасное целое значение в JavaScript, то есть 2<sup>53</sup>-1.
- Для стандартных вычислений с небольшими числами продолжайте использовать тип `number`, так как он занимает меньше памяти и более эффективен в операциях.
- Не забудьте проверять поддержку `BigInt` в тех средах, где используется ваш код, чтобы избежать неожиданных ошибок.
Loading