freeCodeCamp/guide/portuguese/javascript/comparison-operators/index.md

6.8 KiB

title localeTitle
Comparison Operators Operadores de Comparação

O JavaScript possui comparações de conversão estrita e de tipo .

  • Uma comparação estrita (por exemplo, ===) só é verdadeira se os operandos forem do mesmo tipo.

  • A comparação abstrata mais usada (por exemplo, ==) converte os operandos para o mesmo tipo antes de fazer a comparação.

  • Para comparações abstratas relacionais (por exemplo, <=), os operandos são primeiro convertidos em primitivos, depois para o mesmo tipo, antes da comparação.

  • As cadeias de caracteres são comparadas com base na ordem lexicográfica padrão, usando valores Unicode.

Recursos de comparações:

  • Duas strings são estritamente iguais quando possuem a mesma sequência de caracteres, o mesmo comprimento e os mesmos caracteres nas posições correspondentes.

  • Dois números são estritamente iguais quando são numericamente iguais (possuem o mesmo valor numérico). NaN não é igual a nada, incluindo NaN. Zeros positivos e negativos são iguais entre si.

  • Dois operandos booleanos são estritamente iguais se ambos forem verdadeiros ou se ambos forem falsos.

  • Dois objetos distintos nunca são iguais para comparações estritas ou abstratas.

  • Uma expressão comparando Objetos só é verdadeira se os operandos fizerem referência ao mesmo Objeto.

  • Tipos nulos e indefinidos são estritamente iguais a si mesmos e abstratamente iguais entre si.

Operadores de igualdade

Igualdade (==)

O operador de igualdade converte os operandos, se eles não forem do mesmo tipo , e aplicará uma comparação estrita. Se ambos os operandos são objetos , então o JavaScript compara referências internas que são iguais quando operandos se referem ao mesmo objeto na memória.

Sintaxe

 x == y 

Exemplos

 1   ==  1        // true 
 "1"  ==  1        // true 
 1   == '1'       // true 
 0   == false     // true 
 0   == null      // false 
 
   0   == undefined   // false 
 null  == undefined   // true 

Desigualdade (! =)

O operador de desigualdade retorna verdadeiro se os operandos não forem iguais. Se os dois operandos não forem do mesmo tipo , o JavaScript tentará converter os operandos em um tipo apropriado para a comparação. Se os dois operandos são objetos , o JavaScript compara referências internas que não são iguais quando operandos se referem a objetos diferentes na memória.

Sintaxe

x != y 

Exemplos

1 !=   2     // true 
 1 !=  "1"    // false 
 1 !=  '1'    // false 
 1 !=  true   // false 
 0 !=  false  // false 

Identidade / igualdade estrita (===)

O operador de identidade retorna true se os operandos forem estritamente iguais sem conversão de tipo .

Sintaxe

x === y 

Exemplos

3 === 3   // true 
 3 === '3' // false 

Não identidade / desigualdade estrita (! ==)

O operador não identificador retorna true se os operandos não forem iguais e / ou não do mesmo tipo .

Sintaxe

x !== y 

Exemplos

3 !== '3' // true 
 4 !== 3   // true 

Operadores relacionais

Maior que o operador (>)

O operador maior que retorna true se o operando esquerdo for maior que o operando direito.

Sintaxe

x > y 

Exemplos

4 > 3 // true 

Operador maior que ou igual (> =)

O operador maior que ou igual retorna verdadeiro se o operando esquerdo for maior ou igual ao operando direito.

Sintaxe

x >= y 

Exemplos

4 >= 3 // true 
 3 >= 3 // true 

Menos que o operador (<)

O operador menor que retorna true se o operando esquerdo for menor que o operando direito.

Sintaxe

x < y 

Exemplos

3 < 4 // true 

Operador menor que ou igual (<=)

O operador menor que ou igual retorna verdadeiro se o operando esquerdo for menor ou igual ao operando direito.

Sintaxe

x <= y 

Exemplos

3 <= 4 // true 

Você pode encontrar mais informações no MDN .

Comparando null e undefined

Quando comparamos nulo e indefinido, vemos um comportamento diferente. Vamos verificar diferentes cenários através de exemplos

Exemplo - verificação de igualdade estrita (===)

console.log (null === indefinido); // O / P - falso

Otuput é falso e isso é correto porque sabemos que "nulo" e "indefinido" são tipos diferentes.

Exemplo - verificação de igualdade não estrita (==)

console.log (null == indefinido); // O / P: - true

Como? Isso ocorre porque existe uma regra especial para "null" e "undefined". Devido a que eles são iguais em caso de verificação não estrita (==), mas não são iguais a qualquer outro valor.

Se usarmos operadores de comparação como <,>, <=,> = etc., "nulo" e "indefinido" serão convertidos em números e, nesses casos, "nulo" se tornará 0 e "indefinido" será NaN. Vamos verificar alguns desses exemplos.

Exemplo - comparar nulo com 0 (zero)

console.log (nulo> 0); // O / P - falso console.log (null> = 0); // O / P - true console.log (null == 0); // O / P - falso

Estranho? De acordo com a primeira instrução, nulo não é maior que 0 e da segunda instrução nulo é maior ou igual a 0. Então, se pensarmos matematicamente e compararmos ambas as declarações, chegaremos ao resultado que nulo é igual a 0. Mas , conforme a terceira afirmação não é verdadeira. Por quê?

A razão é "comparação" e "verificação de igualdade" ambos funcionam de maneira diferente. Em comparação, "null / undefined" é primeiro convertido em number, portanto, nos dois primeiros casos, "null" se torna 0 e, portanto, case1) (null> 0) -> false e case2) (null> = 0) -> true. Mas, na verificação de igualdade (==), "null / undefined" funciona sem qualquer conversão e como explicado acima (regra especial), na verificação de igualdade "null / undefined" são apenas iguais entre si e não são iguais a qualquer outra coisa. Daí (null == 0) -> falso.

Exemplo - comparar indefinido com 0 (zero)

console.log (indefinido> 0); // O / P - falso console.log (indefinido> = 0); // O / P - falso console.log (indefinido == 0); // O / P - falso

Aqui, testamos os mesmos casos que fizemos para null, mas novamente o resultado é diferente. Por quê?

As razões são as seguintes. Nos dois primeiros casos, estamos comparando undefined com 0 e como mencionado acima na comparação undefined é convertido para NaN. NaN é um valor especial que sempre retorna falso quando comparado com qualquer número e é por isso que temos resultados falsos nos dois primeiros casos. Para a terceira instrução, a razão é a mesma mencionada para "null". Na verificação de igualdade, "null / undefined" são apenas iguais entre si e não iguais a qualquer outra coisa. Daí (indefinido == 0) -> falso.