You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Конвертирование bigint в число всегда происходит неявно, но если значение bigint слишком велико и не подходит под тип number, то дополнительные биты будут отброшены, так что следует быть осторожными с такими преобразованиями.
48
+
Конвертирование bigint в число всегда происходит неявно и без генерации ошибок, но если значение bigint слишком велико и не подходит под тип number, то дополнительные биты будут отброшены, так что следует быть осторожными с такими преобразованиями.
49
49
50
50
````smart header="К `BigInt` числам нельзя применить унарный оператор `+`"
51
51
Унарный оператор `+value` является хорошо известным способом конвертировать `value` в число.
@@ -68,7 +68,7 @@ alert( 2n > 1n ); // true
68
68
alert( 2n > 1 ); // true
69
69
```
70
70
71
-
Так как обычные и bigint числа принадлежат к разным типам, они могут быть равны только при нестрогом сравнении `==`:
71
+
Пожалуйста, обратите внимание, что обычные и bigint числа принадлежат к разным типам, они могут быть равны только при нестрогом сравнении `==`:
72
72
73
73
```js run
74
74
alert( 1 == 1n ); // true
@@ -100,15 +100,15 @@ alert( 0n || 2 ); // 2
100
100
101
101
Создание полифила для `BigInt` достаточно непростая задача. Причина в том, что многие операторы в JavaScript, такие как `+`, `-` и др., ведут себя по-разному с bigint числами по сравнению с обычными числами.
102
102
103
-
К примеру, деление bigint числа всегда возвращает целое число.
103
+
К примеру, деление bigint числа всегда возвращает bigint (округлённое при необходимости).
104
104
105
-
Чтобы эмулировать такое поведение, полифил должен будет заменить поведение всех таких операторов. Такая реализация будет тяжеловесной, что окажет негативное влияние на производительность..
105
+
Чтобы эмулировать такое поведение, полифил должен будет проанализировать код и заменить поведение всех таких операторов. Такая реализация будет тяжеловесной, что окажет негативное влияние на производительность..
106
106
107
107
Вот почему на данный момент нет хорошо реализованного полифила.
108
108
109
109
Существует альтернативное решение, предложеное разработчиками [https://github.com/GoogleChromeLabs/jsbi](JSBI) библиотеки.
110
110
111
-
Они предлагают использовать методы JSBI библиотеки вместо собственной реализации bigint чисел JavaScript интерпретатора:
111
+
Эта библиотека реализовывает bigint числа используя свои собственные методы, которые мы можем использовать вместо собственной реализации bigint чисел JavaScript интерпретатора:
112
112
113
113
| Операция | Встроенный BigInt | JSBI |
114
114
|-----------|-----------------|------|
@@ -119,7 +119,9 @@ alert( 0n || 2 ); // 2
119
119
120
120
...А затем использовать полифил (плагин Babel) для замены вызовов JSBI на встроенные `Bigint` для браузеров, которые их поддерживают.
121
121
122
-
Другими словами, данный подход предлагает использовать JSBI вместо встроенных bigint. JSBI внутри себя работает с числами как с bigint, эмулирует их с соблюдением всех требований спецификации. Таким образом, мы можем выполнять JSBI-код в интерпретаторах, которые не поддерживают `Bigint`, а для тех, которые поддерживают - полифил преобразует вызовы в обычные `Bigint`.
122
+
Другими словами, данный подход предлагает использовать JSBI вместо встроенных bigint. JSBI внутри себя работает с числами как с bigint, эмулирует их с соблюдением всех требований спецификации.
123
+
124
+
Таким образом, мы можем выполнять JSBI-код в интерпретаторах, которые не поддерживают `Bigint`, а для тех, которые поддерживают - полифил преобразует вызовы в обычные `Bigint`.
0 commit comments