7

Тип данных BigInt в JavaScript

BigInt

bigint - числовой примитивный тип данных в JavaScript, позволяющий работать с целыми числами произвольной точности (числа в которых длина ограничена только объёмом доступной памяти).

Проблема в том что тип данных Number может хранить числа только в определенном диапазоне.


const biggestNumber = Number.MAX_SAFE_INTEGER;
console.log(biggestNumber);
console.log(biggestNumber + 1);
console.log(biggestNumber + 2);
console.log(biggestNumber + 3);

Открыть на CodePen


Если мы будем увеличивать это число на Number не сможет точно сохранить результат. BigInt позволяет нам хранить числа за пределами максимального целочисленного значения Number.

Создать BigInt можно следующим образом:

const bigIntExample_1 = 100n;
const bigIntExample_2 = BigInt(100);
console.log(bigIntExample_1, bigIntExample_2);
Открыть на CodePen

Просто добавляем суффикс 'n' в конце литерала числа или используем функцию BigInt().


Теперь попробуем повторить первый пример только уже с использованием BigInt

const bigIntNumber = BigInt(Number.MAX_SAFE_INTEGER);
console.log(bigIntNumber + 1n);
console.log(bigIntNumber + 2n);
console.log(bigIntNumber + 3n);
console.log(bigIntNumber + 4n);
Открыть на CodePen

Аналогично как и с типом данных Number мы можем разделять большие числа через '_'.

const bigIntExample_3 = 1_000_000_000_000_000n;
console.log(bigIntExample_3);

Если мы будем сравнивать BigInt c Number через '===' то при одинаковых значениях получим false, так как это разные типы данных.


const bigIntExample_4 = 10n;
const numberExample_1 = 10;
console.log(bigIntExample_4 === numberExample_1); // false
console.log(bigIntExample_4 == numberExample_1); // true

Открыть на CodePen


В таком случае мы можем использовать оператор '==', тогда сравнение пройдет успешно. Так как '==' сравнивает только значения без приведения типов.


P.S. Больше информации в видеоуроке

P.P.S. Больше уроков у меня на канале.

Web-технологии

545 постов5.8K подписчиков

Правила сообщества

1. Не оскорблять других пользователей

2. Не пытаться продвигать свои услуги под видом тематических постов

3. Не заниматься рекламой

4. Никакой табличной верстки

5. Тег сообщества(не обязателен) pikaweb

Автор поста оценил этот комментарий
Это не точность, а диапазон значений
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Можно пытаться перефразировать сколько угодно, главное чтобы суть была понятна.

Автор поста оценил этот комментарий
Это все конечно замечательно, упрощает жизнь и т.п. Но, как и со многими плюшками в js, с этим проблемка - в стандарт добавлена недавно. Потому для кода становится критичной версия браузера. Я такие вещи не люблю и стараюсь не использовать. Лучше написать код-велосипед, но который гарантировано будет работать...
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

А какой вообще смысл в велосипедах ?

0
Автор поста оценил этот комментарий
У целых чисел нету точности. На то они и целые.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Речь идет не о плавающей точке, а о выделении памяти на число  с произвольной длинной, в данном случае о целых числах с произвольной длинной.

показать ответы
Автор поста оценил этот комментарий
Это все конечно замечательно, упрощает жизнь и т.п. Но, как и со многими плюшками в js, с этим проблемка - в стандарт добавлена недавно. Потому для кода становится критичной версия браузера. Я такие вещи не люблю и стараюсь не использовать. Лучше написать код-велосипед, но который гарантировано будет работать...
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Я думаю для решения таких проблем можно юзать babel или какой-то другой транспайлер кода

0
Автор поста оценил этот комментарий

Ну, читаем:

BigInt: arbitrary-precision integers in JavaScript


INTEGERS, КАРЛ! А не "числа произвольной точности".

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

1. я в материале поправил инфу
2. числа с произвольной точностью - числа в которых длина ограничена только объёмом доступной памяти.

показать ответы
1
Автор поста оценил этот комментарий
bigint - числовой примитивный тип данных в JavaScript, позволяющий работать с числами произвольной точности.
Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Как сравнить строку с числом без приведения типов?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Я не понял вопрос но на всякий случай, для сравнения используются операторы сравнения

https://habr.com/ru/post/138272/

показать ответы
1
Автор поста оценил этот комментарий
Так как '==' сравнивает только значения без приведения типов.
Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

And what?

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества