Operadores de igualdad ECMAScript
- Página anterior Operadores de relación
- Página siguiente Operadores de condicional
Determinar si dos variables son iguales es una operación muy importante en el diseño de programas. Al manejar valores primitivos, esta operación es bastante simple, pero cuando se trata de objetos, la tarea se vuelve un poco más compleja.
ECMAScript proporciona dos conjuntos de operadores de igualdad: los operadores de igualdad y desigualdad se utilizan para manejar valores primitivos, y los operadores de igualdad estricta y desigualdad estricta se utilizan para manejar objetos.
Operadores de igualdad y desigualdad
En ECMAScript, el operador de igualdad se representa con dos iguales (==), y devuelve true cuando y solo cuando los dos operandos son iguales. El operador de desigualdad se representa con un exclamation mark seguido de un igual (!=), y devuelve true cuando y solo cuando los dos operandos no son iguales. Para determinar si dos operandos son iguales, ambos operadores realizan una conversión de tipo.
Las reglas para la conversión de tipos son las siguientes:
- Si un operando es un valor Booleano, se lo convierte en un valor numérico antes de verificar la igualdad. false se convierte en 0, true en 1.
- Si un operando es una cadena y el otro es un número, se intenta convertir la cadena a un número antes de verificar la igualdad.
- Si un operando es un objeto y el otro es una cadena, se intenta convertir el objeto a una cadena antes de verificar la igualdad.
- Si un operando es un objeto y el otro es un número, se intenta convertir el objeto a un número antes de verificar la igualdad.
Al comparar, este operador también sigue las siguientes reglas:
- El valor null y undefined son iguales.
- No se puede convertir null y undefined a otros valores al verificar la igualdad.
- Si algún operando es NaN, el operador de igualdad devolverá false y el operador de desigualdad devolverá true.
- Si ambos operandos son objetos, se compara el valor de su referencia. Si ambos operandos apuntan al mismo objeto, el operador de igualdad devuelve true, de lo contrario, los operandos no son iguales.
Aviso importante:Incluso si ambos números son NaN, el operador de igualdad devuelve false, porque según las reglas, NaN no es igual a NaN.
La siguiente tabla enumera algunas situaciones especiales y sus resultados:
expresión | 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 |
Operadores equivalente y no equivalente
Los operadores equivalentes y no equivalentes son equivalentes y no equivalentes. Estos operadores hacen lo mismo que los operadores iguales y no iguales, pero no realizan la conversión de tipo de datos antes de verificar la igualdad.
El operador equivalente se representa por tres iguales (===), y solo devuelve true cuando los operandos no necesitan convertirse y son iguales.
Por ejemplo:
var sNum = "66"; var iNum = 66; alert(sNum == iNum); // Salida "true" alert(sNum === iNum); // Salida "false"
En este código, el primer alert utiliza el operador igual para comparar la cadena "66" con el número 66, y la salida es "true". Como se mencionó anteriormente, esto es porque la cadena "66" se convertirá en el número 66 y luego se comparará con otro número 66. El segundo alert utiliza el operador equivalente sin convertir el tipo de datos de la cadena y el número, por supuesto, la cadena no es igual al número, por lo que la salida es "false".
El operador no equivalente se representa por un exclamation mark seguido de dos iguales (!==), y solo devuelve true cuando los operandos no necesitan convertirse y no son iguales.
Por ejemplo:
var sNum = "66"; var iNum = 66; alert(sNum != iNum); // Salida "false" alert(sNum !== iNum); // Salida "true"
Aquí, el primer alert utiliza el operador no igual para convertir la cadena "66" en el número 66, lo que lo hace igual al segundo operando 66. Por lo tanto, el resultado de la calculadora es "false", ya que los dos operandos son iguales. El segundo alert utiliza el operador no equivalente. La pregunta que hace es: "sNum" ¿es diferente de "iNum"? La respuesta a esta pregunta es: sí (true), porque sNum es una cadena y iNum es un número, por supuesto, son diferentes.
- Página anterior Operadores de relación
- Página siguiente Operadores de condicional