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
As operações de conversão são sempre silenciosas, nunca dão erros, mas se o bigint for muito grande e não couber no tipo número, então bits extras serão cortados, então devemos ter cuidado ao fazer a conversão.
49
49
50
-
````smart header="O operador unário mais não é suportado em bigints"
51
-
O operador unário mais `+valor` é uma maneira bem conhecida de converter `valor` para um número.
50
+
````smart header="O operador mais unário não é suportado em BigInts"
51
+
O operador mais unário `+valor` é uma maneira bem conhecida de converter `valor` para um número.
52
52
53
-
Para evitar confusão, não é suportado em bigints:
53
+
Para evitar confusão, não é suportado em BigInts:
54
54
```js run
55
55
let bigint = 1n;
56
56
57
57
alert( +bigint ); // erro
58
58
```
59
-
Então, devemos usar `Number()` para converter um bigint em um número.
59
+
Então, devemos usar `Number()` para converter um BigInt em um número.
60
60
````
61
61
62
62
## Comparações
63
63
64
-
Comparações, como `<`, `>` funcionam bem com bigints e números:
64
+
Comparações, como `<`, `>` funcionam bem com BigInts e números:
65
65
66
66
```js run
67
67
alert( 2n>1n ); // true
68
68
69
69
alert( 2n>1 ); // true
70
70
```
71
71
72
-
Note que, como números e bigints pertencem a tipos diferentes, eles podem ser iguais `==`, mas não estritamente iguais `===`:
72
+
Note que, como números e BigInts pertencem a tipos diferentes, eles podem ser iguais `==`, mas não estritamente iguais `===`:
73
73
74
74
```js run
75
75
alert( 1==1n ); // true
@@ -79,7 +79,7 @@ alert( 1 === 1n ); // false
79
79
80
80
## Operações booleanas
81
81
82
-
Quando dentro de `if` ou outras operações booleanas, bigints se comportam como números.
82
+
Quando dentro de `if` ou outras operações booleanas, BigInts se comportam como números.
83
83
84
84
Por exemplo, em `if`, o bigint `0n` é falso, outros valores são verdadeiros:
85
85
@@ -88,7 +88,7 @@ if (0n) {
88
88
// nunca executa
89
89
}
90
90
```
91
-
Operadores booleanos, como `||`, `&&` e outros também funcionam com bigints semelhante aos números:
91
+
Operadores booleanos, como `||`, `&&` e outros também funcionam com BigInts semelhante aos números:
92
92
93
93
```js run
94
94
alert( 1n||2 ); // 1 (1n é considerado verdadeiro)
@@ -98,17 +98,17 @@ alert( 0n || 2 ); // 2 (0n é considerado falso)
98
98
99
99
## Polyfills
100
100
101
-
Fazer polyfill para bigints é complicado. A razão é que muitos operadores JavaScript, como `+`, `-` e assim por diante se comportam de maneira diferente com bigints em comparação com números regulares.
101
+
Fazer um polyfill para BigInts é complicado. A razão é que muitos operadores JavaScript, como `+`, `-` e assim por diante se comportam de maneira diferente com BigInts em comparação com números regulares.
102
102
103
-
Por exemplo, a divisão de bigints sempre retorna um bigint (arredondado se necessário).
103
+
Por exemplo, a divisão de BigInts sempre retorna um bigint (arredondado se necessário).
104
104
105
105
Para emular tal comportamento, um polyfill precisaria analisar o código e substituir todos esses operadores com suas funções. Mas fazer isso é trabalhoso e custaria muito em termos de desempenho.
106
106
107
107
Então, não há um polyfill bem conhecido e bom.
108
108
109
-
Embora, o caminho inverso é proposto pelos desenvolvedores da biblioteca [JSBI](https://github.com/GoogleChromeLabs/jsbi).
109
+
Apesar disso, o caminho inverso é proposto pelos desenvolvedores da biblioteca [JSBI](https://github.com/GoogleChromeLabs/jsbi).
110
110
111
-
Esta biblioteca implementa números grandes usando seus próprios métodos. Podemos usá-los em vez de bigints nativos:
111
+
Esta biblioteca implementa números grandes usando seus próprios métodos. Podemos usá-los em vez de BigInts nativos:
112
112
113
113
| Operação |`BigInt` nativo | JSBI |
114
114
|-----------|-----------------|------|
@@ -117,11 +117,11 @@ Esta biblioteca implementa números grandes usando seus próprios métodos. Pode
117
117
| Subtração |`c = a - b`|`c = JSBI.subtract(a, b)`|
118
118
| ... | ... | ... |
119
119
120
-
...E então use o polyfill (plugin do Babel) para converter chamadas JSBI para bigints nativos para aqueles navegadores que os suportam.
120
+
...E então use o polyfill (plugin do Babel) para converter chamadas JSBI para BigInts nativos para aqueles navegadores que os suportam.
121
121
122
-
Em outras palavras, essa abordagem sugere que escrevamos código em JSBI em vez de bigints nativos. Mas o JSBI trabalha com números como se fossem bigints internamente, emula-os de perto seguindo a especificação, então o código será "pronto para bigint".
122
+
Em outras palavras, essa abordagem sugere que escrevamos código em JSBI em vez de BigInts nativos. Mas o JSBI trabalha com números como se fossem BigInts internamente, emula-os de perto seguindo a especificação, então o código será "pronto para bigint".
123
123
124
-
Podemos usar esse código JSBI "como está" para motores que não suportam bigints e para aqueles que suportam - o polyfill converterá as chamadas para bigints nativos.
124
+
Podemos usar esse código JSBI "como está" para motores que não suportam BigInts e para aqueles que suportam - o polyfill converterá as chamadas para BigInts nativos.
0 commit comments