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
- Maior/menor ou igual: <code>a >= b</code>, <code>a <= b</code>.
9
-
-Equals: `a == b`, observe o sinal de igualdade duplo `==` significa o teste de igualdade, enquanto um único `a = b` significa uma atribuição.
9
+
-Igual: `a == b`, observe o sinal de igualdade duplo `==` significa o teste de igualdade, enquanto um único `a = b` significa uma atribuição.
10
10
- Diferente: Em matemática a notação é <code>≠</code>, mas em JavaScript é escrita como <code>a != b</code>.
11
11
12
12
Neste artigo vamos aprender mais sobre diferentes tipos de comparações, como o JavaScript as processa, incluindo peculiaridades importantes.
@@ -17,18 +17,18 @@ No final, você encontrará uma boa receita para evitar problemas relacionados a
17
17
18
18
Todos os operadores de comparação retornam um valor booleano:
19
19
20
-
-`true` -- significa "sim", "correto" ou "verdade".
20
+
-`true` -- significa "sim", "correto" ou "verdadeiro".
21
21
-`false` -- significa "não", "errado" ou "falso".
22
22
23
23
Por exemplo:
24
24
25
25
```js run
26
-
alert( 2>1 ); // true (correto)
27
-
alert( 2==1 ); // false (errado)
28
-
alert( 2!=1 ); // true (correto)
26
+
alert( 2>1 ); // true (verdadeiro)
27
+
alert( 2==1 ); // false (falso)
28
+
alert( 2!=1 ); // true (verdadeiro)
29
29
```
30
30
31
-
Um resultado de comparação pode ser atribuído a uma variável, assim como qualquer valor:
31
+
Um resultado de comparação pode ser atribuído a uma variável, exatamente como qualquer valor:
32
32
33
33
```js run
34
34
let result =5>4; // atribui o resultado da comparação
@@ -37,7 +37,7 @@ alert( result ); // true
37
37
38
38
## Comparação de strings
39
39
40
-
Para ver se uma string é maior que outra, o JavaScript usa o chamado ordem "dicionário" ou "lexicográfico".
40
+
Para ver se uma string é maior que outra, o JavaScript usa a chamado ordem "dicionário" ou "lexicográfica".
41
41
42
42
Em outras palavras, as strings são comparadas letra a letra.
43
43
@@ -71,15 +71,15 @@ O algoritmo de comparação fornecido acima é aproximadamente equivalente ao us
71
71
Por exemplo, um caso relevante. Uma letra maiúscula `"A"` não é igual à letra minúscula `"a"`. Qual é maior? A letra minúscula `"a"`. Por quê? Porque o caractere minúsculo tem um índice maior na tabela de codificação interna que o JavaScript usa (Unicode). Voltaremos a detalhes específicos e consequências disso no capítulo <info:string>.
72
72
```
73
73
74
-
## Comparison of different types
74
+
## Comparação de diferentes tipos
75
75
76
-
Quando comparamos valores de tipos diferentes, o JavaScript converte os valores em números.
76
+
Quando é comparado valores de tipos diferentes, o JavaScript converte os valores em números.
77
77
78
78
Por exemplo:
79
79
80
80
```js run
81
-
alert( '2'>1 ); // true, string '2' se torna um número 2
82
-
alert( '01'==1 ); // true, string '01' se torna um número 1
81
+
alert( '2'>1 ); // true, string '2' se torna no número 2
82
+
alert( '01'==1 ); // true, string '01' se torna no número 1
83
83
```
84
84
85
85
Para valores booleanos, `true` torna-se `1` e `false` torna-se `0`.
Do ponto de vista do JavaScript, esse resultado é bastante normal. Uma verificação de igualdade converte valores usando a conversão numérica (portanto, `"0"` se torna `0`), enquanto a conversão explícita `booleana` usa outro conjunto de regras.
112
+
Do ponto de vista do JavaScript, esse resultado é bastante normal. Uma verificação de igualdade converte valores usando a conversão numérica (portanto, `"0"` se torna `0`), enquanto a conversão `Boolean` explícita usa outro conjunto de regras.
113
113
````
114
114
115
115
## Igualdade estrita
116
116
117
-
Uma verificação de igualdade regular `==` tem um problema. Ele não pode diferenciar `0` de `false`:
117
+
Uma verificação de igualdade regular `==` tem um problema. Ela não pode diferenciar `0` de `false`:
118
118
119
119
```js run
120
120
alert( 0==false ); // true
@@ -130,7 +130,7 @@ Isso acontece porque operandos de tipos diferentes são convertidos em números
130
130
131
131
O que fazer se quisermos diferenciar `0` de `false`?
132
132
133
-
**Um operador de igualdade estrito`===` verifica a igualdade sem conversão de tipo.**
133
+
**Um operador de igualdade estrita`===` verifica a igualdade sem conversão de tipo.**
134
134
135
135
Em outras palavras, se `a` e `b` forem de tipos diferentes, então `a === b` retornará imediatamente `false` sem tentar convertê-los.
136
136
@@ -140,7 +140,7 @@ Vamos tentar:
140
140
alert( 0===false ); // false, porque os tipos são diferentes
141
141
```
142
142
143
-
Há também um operador de "não igualdade estrita" `!==` análogo a `!=`.
143
+
Há também um operador de "desigualdade estrita" `!==` análogo a `!=`.
144
144
145
145
O operador de igualdade estrita é um pouco mais longo para escrever, mas torna óbvio o que está acontecendo e deixa menos espaço para erros.
146
146
@@ -156,7 +156,7 @@ Para uma verificação de igualdade estrita `===`
156
156
```
157
157
158
158
Para uma verificação não estrita `==`
159
-
: Há uma regra especial. Esses dois são um "casal doce": eles se igualam (no sentido de `==`), mas não qualquer outro valor.
159
+
: Há uma regra especial. Esses dois são um "casal doce": eles se igualam (no sentido de `==`), mas não a qualquer outro valor.
160
160
161
161
```js run
162
162
alert( null == undefined ); // true
@@ -165,11 +165,11 @@ Para uma verificação não estrita `==`
165
165
Para matemática e outras comparações `< > <= >=`
166
166
: `null/undefined` são convertidos em números: `null` torna-se `0`, enquanto `undefined` torna-se `NaN`.
167
167
168
-
Agora vamos ver algumas coisas engraçadas que acontecem quando aplicamos essas regras. E, o que é mais importante, como não cair na armadilha com eles.: Esses valores são diferentes, porque cada um deles é de um tipo diferente.
168
+
Agora vamos ver algumas coisas engraçadas que acontecem quando aplicamos essas regras. E, o que é mais importante, como não cair numa armadilha com eles.: Esses valores são diferentes, porque cada um deles é de um tipo diferente.
169
169
170
170
### Resultado estranho: null vs 0
171
171
172
-
Vamos comparar `null` com um zero:
172
+
Vamos comparar `null` com zero:
173
173
174
174
```js run
175
175
alert( null>0 ); // (1) false
@@ -181,11 +181,11 @@ Matematicamente, isso é estranho. O último resultado afirma que "`null` é mai
181
181
182
182
A razão é que uma verificação de igualdade `==` e comparações `> < >= <=` funcionam de forma diferente. As comparações convertem `null` em um número, tratando-o como `0`. É por isso que (3) `null >= 0` é verdadeiro e (1) `null > 0` é falso.
183
183
184
-
Por outro lado, a verificação de igualdade `==` para `undefined` e `null` é definida de tal forma que, sem nenhuma conversão, eles são iguais e não são iguais a mais nada. É por isso que (2) `null == 0` é falso.
184
+
Por outro lado, a verificação de igualdade `==` para `undefined` e `null` é definida de tal forma que, sem nenhuma conversão, eles são iguais entre si e não são iguais a mais nada. É por isso que (2) `null == 0` é falso.
185
185
186
-
### Um incomparável indefinido
186
+
### Um incomparável "undefined"
187
187
188
-
O valor `undefined` não deve ser comparado a outros valores:
188
+
O valor `undefined`(indefinido) não deve ser comparado a outros valores:
189
189
190
190
```js run
191
191
alert( undefined>0 ); // false (1)
@@ -197,20 +197,20 @@ Por que não gostam do zero? Sempre falso!
197
197
198
198
Obtemos esses resultados porque:
199
199
200
-
- Comparações `(1)` e `(2)` retornam `false` porque `undefined` é convertido em `NaN` e `NaN` é um valor numérico especial que retorna `false` para todas as comparações.
200
+
- Comparações `(1)` e `(2)` retornam `false` porque `undefined` é convertido em `NaN`, e `NaN` é um valor numérico especial que retorna `false` para todas as comparações.
201
201
- A verificação de igualdade `(3)` retorna `false` porque `undefined` só é igual a `null`, `undefined` e nenhum outro valor.
202
202
203
203
### Evite problemas
204
204
205
-
Por que examinamos esses exemplos? Devemos nos lembrar dessas peculiaridades o tempo todo? Bem, na verdade não. Na verdade, essas coisas complicadas gradualmente se tornarão familiares com o tempo, mas há uma maneira sólida de evitar problemas com elas:
205
+
Por que examinamos esses exemplos? Devemos nos lembrar dessas peculiaridades o tempo todo? Bem, na verdade, não. Essas coisas complicadas gradualmente se tornarão familiares com o tempo, mas há uma maneira sólida de evitar problemas com elas:
206
206
207
207
- Trate qualquer comparação com `undefined/null` exceto a igualdade estrita `===` com cuidado excepcional.
208
-
- Não use comparações `>= > < <=` com uma variável que pode ser `null/undefined`, a menos que você tenha certeza do que está fazendo. Se uma variável puder ter esses valores, verifique-os separadamente.
208
+
- Não use comparações `>= > < <=` com uma variável que pode ser `null/undefined`, a menos que você tenha a certeza do que está fazendo. Se uma variável puder a ter esses valores, verifique-os separadamente.
209
209
210
210
## Resumo
211
211
212
212
- Os operadores de comparação retornam um valor booleano.
213
-
- As strings são comparadas letra por letra na ordem do "dicionário".
213
+
- As strings são comparadas letra a letra na ordem do "dicionário".
214
214
- Quando valores de tipos diferentes são comparados, eles são convertidos em números (com a exclusão de uma verificação de igualdade estrita).
215
215
- Os valores `null` e `undefined` são iguais `==` entre si e não são iguais a nenhum outro valor.
216
216
- Tenha cuidado ao usar comparações como `>` ou `<` com variáveis que podem ocasionalmente ser `null/undefined`. Verificar por `null/undefined` separadamente é uma boa ideia.
0 commit comments