Skip to content

Commit 55ec02c

Browse files
committed
Add changes from commit 7cd8f55
1 parent 65fb224 commit 55ec02c

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

1-js/99-js-misc/05-bigint/article.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ alert(bigint + BigInt(number)); // 3
4545
alert(Number(bigint) + number); // 3
4646
```
4747

48-
Конвертирование bigint в число всегда происходит неявно, но если значение bigint слишком велико и не подходит под тип number, то дополнительные биты будут отброшены, так что следует быть осторожными с такими преобразованиями.
48+
Конвертирование bigint в число всегда происходит неявно и без генерации ошибок, но если значение bigint слишком велико и не подходит под тип number, то дополнительные биты будут отброшены, так что следует быть осторожными с такими преобразованиями.
4949

5050
````smart header="К `BigInt` числам нельзя применить унарный оператор `+`"
5151
Унарный оператор `+value` является хорошо известным способом конвертировать `value` в число.
@@ -68,7 +68,7 @@ alert( 2n > 1n ); // true
6868
alert( 2n > 1 ); // true
6969
```
7070
71-
Так как обычные и bigint числа принадлежат к разным типам, они могут быть равны только при нестрогом сравнении `==`:
71+
Пожалуйста, обратите внимание, что обычные и bigint числа принадлежат к разным типам, они могут быть равны только при нестрогом сравнении `==`:
7272
7373
```js run
7474
alert( 1 == 1n ); // true
@@ -100,15 +100,15 @@ alert( 0n || 2 ); // 2
100100
101101
Создание полифила для `BigInt` достаточно непростая задача. Причина в том, что многие операторы в JavaScript, такие как `+`, `-` и др., ведут себя по-разному с bigint числами по сравнению с обычными числами.
102102
103-
К примеру, деление bigint числа всегда возвращает целое число.
103+
К примеру, деление bigint числа всегда возвращает bigint (округлённое при необходимости).
104104
105-
Чтобы эмулировать такое поведение, полифил должен будет заменить поведение всех таких операторов. Такая реализация будет тяжеловесной, что окажет негативное влияние на производительность..
105+
Чтобы эмулировать такое поведение, полифил должен будет проанализировать код и заменить поведение всех таких операторов. Такая реализация будет тяжеловесной, что окажет негативное влияние на производительность..
106106
107107
Вот почему на данный момент нет хорошо реализованного полифила.
108108
109109
Существует альтернативное решение, предложеное разработчиками [https://github.com/GoogleChromeLabs/jsbi](JSBI) библиотеки.
110110
111-
Они предлагают использовать методы JSBI библиотеки вместо собственной реализации bigint чисел JavaScript интерпретатора:
111+
Эта библиотека реализовывает bigint числа используя свои собственные методы, которые мы можем использовать вместо собственной реализации bigint чисел JavaScript интерпретатора:
112112
113113
| Операция | Встроенный BigInt | JSBI |
114114
|-----------|-----------------|------|
@@ -119,7 +119,9 @@ alert( 0n || 2 ); // 2
119119
120120
...А затем использовать полифил (плагин Babel) для замены вызовов JSBI на встроенные `Bigint` для браузеров, которые их поддерживают.
121121
122-
Другими словами, данный подход предлагает использовать JSBI вместо встроенных bigint. JSBI внутри себя работает с числами как с bigint, эмулирует их с соблюдением всех требований спецификации. Таким образом, мы можем выполнять JSBI-код в интерпретаторах, которые не поддерживают `Bigint`, а для тех, которые поддерживают - полифил преобразует вызовы в обычные `Bigint`.
122+
Другими словами, данный подход предлагает использовать JSBI вместо встроенных bigint. JSBI внутри себя работает с числами как с bigint, эмулирует их с соблюдением всех требований спецификации.
123+
124+
Таким образом, мы можем выполнять JSBI-код в интерпретаторах, которые не поддерживают `Bigint`, а для тех, которые поддерживают - полифил преобразует вызовы в обычные `Bigint`.
123125
124126
## Ссылки
125127

0 commit comments

Comments
 (0)