JavaScript Igualdad abstracta (==)


Ejemplo

Los operandos del operador de igualdad abstracta se comparan después de convertirse a un tipo común. Cómo se realiza esta conversión se basa en la especificación del operador:

Especificación para el operador == :

7.2.13 Comparación de igualdad abstracta

La comparación x == y , donde x e y son valores, produce true o false . Tal comparación se realiza de la siguiente manera:

  1. Si el Type(x) es el mismo que el Type(y) , entonces:
  • a. Devuelve el resultado de realizar una comparación de igualdad estricta x === y .
  1. Si x es null e y undefined está undefined , devuelva true .
  2. Si x undefined está undefined y y es null , devuelva true .
  3. Si el Type(x) es Number y el Type(y) es String , devuelva el resultado de la comparación x == ToNumber(y) .
  4. Si el Type(x) es String y el Type(y) es Number , devuelva el resultado de la comparación a ToNumber(x) == y .
  5. Si el Type(x) es Boolean , devuelva el resultado de la comparación a ToNumber(x) == y .
  6. Si el Type(y) es Boolean , devuelva el resultado de la comparison x == ToNumber(y) .
  7. Si el Type(x) es String , Number o Symbol y el Type(y) es Object , devuelva el resultado de la comparación x == ToPrimitive(y) .
  8. Si el Type(x) es Objeto y el Type(y) es String , Number o Symbol , devuelva el resultado de la comparación ToPrimitive(x) == y .
  9. Devuelve false

Ejemplos:

1 == 1;                     // true
1 == true;                  // true  (operand converted to number: true => 1)
1 == '1';                   // true  (operand converted to number: '1' => 1 )
1 == '1.00';                // true
1 == '1.00000000001';       // false
1 == '1.00000000000000001'; // true  (true due to precision loss)
null == undefined;          // true  (spec #2)
1 == 2;                     // false
0 == false;                 // true
0 == undefined;             // false
0 == "";                    // true