Operadores de Igualdade ECMAScript
- Página anterior Operador de comparação relacional
- Próxima página Operador de comparação condicional
�断两个变量是否相等是程序设计中非常重要的运算。在处理原始值时,这种运算相当简单,但涉及对象,任务就稍有点复杂。
O ECMAScript fornece dois conjuntos de operadores de igualdade: os operadores de igualdade e desigualdade são usados para lidar com valores primitivos, os operadores de igualdade e desigualdade totais são usados para lidar com objetos.
Operadores de igualdade e desigualdade
No ECMAScript, o operador de igualdade é representado por dois iguais (==), ele retorna true quando e apenas quando os dois operandos forem iguais. O operador de desigualdade é representado por um exclamativo seguido de um igual (!=), ele retorna true quando e apenas quando os dois operandos forem diferentes. Para determinar se dois operandos são iguais, esses dois operadores fazem conversão de tipo.
As regras para a conversão de tipo são as seguintes:
- Se um operando for um valor Booleano, antes de verificar a igualdade, converta-o para o valor numérico. false converte para 0, true para 1.
- Se um operando for uma string e o outro for um número, antes de verificar a igualdade, tentar converter a string para um número.
- Se um operando for um objeto e o outro for uma string, antes de verificar a igualdade, tentar converter o objeto para uma string.
- Se um operando for um objeto e o outro for um número, antes de verificar a igualdade, tentar converter o objeto para um número.
Ao comparar, o operador também observa as seguintes regras:
- Os valores null e undefined são iguais.
- Ao verificar a igualdade, não pode converter null e undefined em outros valores.
- Se algum operando for NaN, o operador de igualdade retornará false e o operador de desigualdade retornará true.
- Se os dois operandos forem objetos, é comparado o valor de referência deles. Se os dois operandos apontarem para o mesmo objeto, o operador de igualdade retorna true, caso contrário, os dois operandos não são iguais.
Aviso importante:Mesmo que os dois números sejam NaN, o operador de igualdade ainda retorna false, porque, de acordo com as regras, NaN não é igual a NaN.
A tabela a seguir lista alguns casos especiais e seus resultados:
expressão | valor |
---|---|
null == undefined | true |
"NaN" == NaN | false |
5 == NaN | false |
NaN == NaN | false |
NaN != NaN | true |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
"5" == 5 | true |
Operador de igualdade completa e operador de desigualdade completa
Os operadores de igualdade e desigualdade equivalentes são o operador de igualdade completa e o operador de desigualdade completa. Esses operadores fazem a mesma coisa que os operadores de igualdade e desigualdade, mas eles não executam conversão de tipo antes de verificar a igualdade.
O operador de igualdade completa é representado por três sinais de igual (===), e retorna true apenas quando os operandos são iguais sem conversão de tipo.
Por exemplo:
var sNum = "66"; var iNum = 66; alert(sNum == iNum); // Saída "true" alert(sNum === iNum); // Saída "falso"
Neste código, o primeiro alert usa o sinal de igual para comparar a string "66" com o número 66, resultando em "true". Como mencionado anteriormente, isso ocorre porque a string "66" será convertida para o número 66, antes de ser comparada com o outro número 66. O segundo alert usa o operador de igualdade completa para comparar a string e o número sem conversão de tipo, claro, a string não é igual ao número, então a saída é "falso".
O operador de desigualdade completa é representado por um sinal de exclamação seguido de dois sinais de igual (!==), e retorna true apenas quando os operandos não precisam de conversão de tipo e são diferentes.
Por exemplo:
var sNum = "66"; var iNum = 66; alert(sNum != iNum); // Saída "falso" alert(sNum !== iNum); // Saída "true"
Aqui, o primeiro alert usa o operador de desigualdade para transformar a string "66" em número 66, tornando-o igual ao segundo operando 66. Portanto, o resultado da computação é "falso", pois os dois operandos são iguais. O segundo alert usa o operador de desigualdade completa. A pergunta feita é: "sNum" é diferente de "iNum"? A resposta a essa pergunta é: sim (true), porque sNum é uma string e iNum é um número, eles, claro, são diferentes.
- Página anterior Operador de comparação relacional
- Próxima página Operador de comparação condicional