Skip to content
garevna edited this page Mar 1, 2019 · 4 revisions

🎓 BigInt

ES10 ( 2019 )

BigInt - новый тип данных ( числа произвольной точности )

Ранее максимально возможным числом было Number.MAX_SAFE_INTEGER ( 2**53, или 9007199254740992 )

Теперь это ограничение снято


🎓 Создание BigInt

Для создания числа типа BigInt нужно просто добавить n:

let bigNumber = 78n

или использовать конструктор нового типа данных:

let bigNumber = Number.MAX_SAFE_INTEGER + 5003  // 9007199254745994
bigNumber = BigInt ( bigNumber ) // 9007199254745994n

Теперь оператор typeof будет возвращать новый тип данных:

typeof bigNumber // 'bigint'

🎓 Приведение типов

NaN, null, Infinity не могут быть конвертированы в bigint

Infinity
BigInt ( Infinity )

будет сгенерировано исключение RangeError

⛔️ Uncaught RangeError: The number Infinity cannot be converted to a BigInt because it is not an integer
NaN
BigInt ( NaN )

будет сгенерировано исключение RangeError

⛔️ Uncaught RangeError: The number NaN cannot be converted to a BigInt because it is not an integer
null
BigInt ( null )

будет сгенерировано исключение RangeError

⛔️ Uncaught TypeError: Cannot convert null to a BigInt

Boolean --> BigInt
BigInt ( false )  // 0n
BigInt ( true )   // 1n
[] --> BigInt
BigInt ( [] )   // 0n
String --> BigInt
BigInt ( "45" )        // 45n
BigInt ( "45" + 11 )   // 4511n
BigInt ( "45" - 11 )   // 34n

BigInt ( "45" - true ) // 44n

а вот такое приведение:

BigInt ( "45 + 8" )
⛔️ Uncaught SyntaxError: Cannot convert 45 + 8 to a BigInt

🎓 Арифметические операции

Арифметические операции с участием данных типа bigint возможны только при условии, что оба операнда имеют тип данных bigint

При попытке выполнить арифметическую операцию с операндами различного типа

bigNumber * 2

будет сгенерировано исключение

⛔️ Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions

При попытке применить функции библиотеки Math к данным типа bigint

Math.sin ( bigNumber )

будет сгенерировано исключение

⛔️ Uncaught TypeError: Cannot convert a BigInt value to a number

Однако можно привести данное типа bigint к обычному типу number

Number ( bigNumber ) // 9007199254745994

При приведении к строке оба типа ( bigint и number ) будут возвращать одинаковый результат:

bigNumber = bigNumber * bigNumber // 81129638414696789717133459048036n
bigNumber.toString() // "81129638414696789717133459048036"

Number ( bigNumber ) // 8.112963841469679e+31
bigNumber.toString() // "81129638414696789717133459048036"

Данные типа bigint можно использовать в качестве индексов элементов массива:

let bigArray = [
    BigInt ( Number.MAX_SAFE_INTEGER + 2 ),
    BigInt ( Number.MAX_SAFE_INTEGER + 3 ),
    BigInt ( Number.MAX_SAFE_INTEGER + 4 ),
    BigInt ( Number.MAX_SAFE_INTEGER + 5 )
]

bigArray [ BigInt ( 1 ) ]  // 9007199254740994n

🎓 Битовые операции

Битовые операции работают с данными типа bigint и возвращают результат типа bigint:

bigArray [ 0 ] ^ bigArray [ 1 ]  // 2n

bigArray [ 0 ] | bigArray [ 1 ]  // 9007199254740994n

~ bigArray [ 1 ]  // -9007199254740995n

© Irina H.Fylyppova 2018
Использование данных материалов или любой их части коммерческими школами ( курсами ) является нарушением авторских прав


Новая версия


1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19

Занятие 1

⤵️

Занятие 2

⤴️ ⤵️

Занятие 3

⤴️ ⤵️

Занятие 4

⤴️ ⤵️

Занятие 5

⤴️ ⤵️

Занятие 6

⤴️ ⤵️

Занятие 7

⤴️ ⤵️

Занятие 8

⤴️ ⤵️

Занятие 9

⤴️ ⤵️

Занятие 10

⤴️ ⤵️

Занятие 11

⤴️ ⤵️

Занятие 12

⤴️ ⤵️

Занятие 13

⤴️ ⤵️

Занятие 14

⤴️ ⤵️

Занятие 15

⤴️ ⤵️

Занятие 16

⤴️ ⤵️

Занятие 17

⤴️ ⤵️

Занятие 18

⤴️ ⤵️

Занятие 19

⤴️ ⤵️

⤴️

ico20 Дополнительно
dir-20 Справочная инфо

Clone this wiki locally