Novedades ES6

Operadores de Comparación

JavaScript tiene comparaciones estrictas y de conversión de tipos. Una comparación estricta (por ejemplo, ===) solo es verdadera si los operandos son del mismo tipo y los contenidos coinciden. La comparación abstracta más comúnmente utilizada (por ejemplo, ==) convierte los operandos al mismo tipo antes de hacer la comparación. Para las comparaciones abstractas relacionales (p. Ej., <=), Los operandos primero se convierten en primitivos, y luego en el mismo tipo, antes de la comparación.

Las cadenas se comparan en base al orden lexicográfico estándar, utilizando valores Unicode.

Características de las comparaciones:

  • Dos cadenas son estrictamente iguales cuando tienen la misma secuencia de caracteres, la misma longitud y los mismos caracteres en las posiciones correspondientes.
  • Dos números son estrictamente iguales cuando son numéricamente iguales (tienen el mismo valor numérico). NaN no es igual a nada, incluido NaN. Los ceros positivos y negativos son iguales entre sí. 
  • Dos operandos booleanos son estrictamente iguales si ambos son true o ambos son false.
  • Dos objetos distintos nunca son iguales para comparaciones estrictas o abstractas.
  • Una expresión que compara objetos solo es verdadera si los operandos hacen referencia al mismo objeto.
  • Los tipos Null y Undefined son estrictamente iguales a ellos mismos y abstractivamente iguales entre sí.

Operadores de igualdad

Igualdad (==)

El operador de igualdad convierte los operandos si no son del mismo tipo, luego aplica una comparación estricta. Si ambos operandos son objetos, entonces JavaScript compara las referencias internas que son iguales cuando los operandos se refieren al mismo objeto en la memoria.

El operador de igualdad == analiza los operandos de la siguiente forma:

  • Si los dos operandos no son del mismo tipo el operador == primero verifica si uno de los valores es null y el otro undefined luego retorna true, si uno es un número y el otro un string convierte a string el número y luego compara, si uno de los valores es true convierte este a 1 y luego compara, si uno de los valores es false convierte este a 0 (cero) y luego compara.

Sintaxis

x == y

Ejemplos

1    ==  1         // true
'1'  ==  1         // true
1    == '1'        // true
0    == false      // true
0    == null       // false
var object1 = {'key': 'value'}, object2 = {'key': 'value'};
object1 == object2 // false
0    == undefined  // false
null == undefined  // true

Desigualdad (!=)

El operador de desigualdad devuelve verdadero si los operandos no son iguales. Si los dos operandos no son del mismo tipo, JavaScript intenta convertir los operandos a un tipo apropiado para la comparación. Si ambos operandos son objetos, entonces JavaScript compara las referencias internas que no son iguales cuando los operandos se refieren a diferentes objetos en la memoria.

Sintaxis

x != y

Ejemplos

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

Identidad / igualdad estricta (===)

El operador de identidad devuelve verdadero si los operandos son estrictamente iguales (ver arriba) sin conversión de tipo.

El operador de igualdad estricto === analiza los operandos de la siguiente forma:

  • Si los dos valores son de diferente tipo luego el resultado es false.
  • Si los dos valores almacen null luego el resultado es true. Lo mismo si los dos valores almacenan undefined.
  • Si uno de los valores almacena el valor NaN luego la condición se verifica como false.

Sintaxis

x === y

Ejemplos

3 === 3   // true
3 === '3' // false
var object1 = {'key': 'value'}, object2 = {'key': 'value'};
object1 === object2 // false

Sin identidad / desigualdad estricta (!==)

El operador sin identidad devuelve verdadero si los operandos no son iguales y / o no del mismo tipo.

Sintaxis

x !== y

Ejemplos

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

Operadores relacionales

Cada uno de estos operadores llamará a la función valueOf() en cada operando antes de realizar una comparación.

Operador mayor que (>)

El operador mayor que, devuelve verdadero si el operando izquierdo es mayor que el operando derecho.

Sintaxis
x > y
Ejemplos
4 > 3 // true

Operador mayor o igual (>=)

El operador mayor o igual que, devuelve verdadero si el operando izquierdo es mayor o igual que el operando derecho.

Sintaxis
x >= y
Ejemplos
4 >= 3 // true
 3 >= 3 // true

Operador menor que (<)

El operador menor que devuelve verdadero si el operando de la izquierda es menor que el operando de la derecha.

Sintaxis
x < y
Ejemplos
3 < 4 // true

Operador menor o igual (<=)

El operador menor o igual devuelve verdadero si el operando izquierdo es menor o igual que el operando derecho.

Sintaxis
x <= y
Ejemplos
3 <= 4 // true

Usando los operadores de igualdad

Los operadores de igualdad estándar (== y !=) utilizan el Algoritmo de Comparación de Igualdad Abstracta para comparar dos operandos. Si los operandos son de tipos diferentes, intentará convertirlos al mismo tipo antes de hacer la comparación, por ejemplo, en la expresión 5 == '5', la cadena de la derecha se convierte a Number antes de realizar la comparación.

Los operadores de igualdad estricta (=== y !==) usan el Algoritmo de Comparación de Igualdad Estricta y están destinados a realizar comparaciones de igualdad en operandos del mismo tipo. Si los operandos son de tipos diferentes, el resultado siempre es false, entonces 5 !== '5'.

Utilice operadores de igualdad estrictos si los operandos deben ser de un tipo específico así como de valor o si el tipo exacto de los operandos es importante. De lo contrario, utilice los operadores de igualdad estándar, que le permiten comparar la identidad de dos operandos, incluso si no son del mismo tipo.

Cuando la conversión de tipo está involucrada en la comparación (es decir, comparación no estricta), JavaScript convierte los tipos String, Number, Boolean o Object operandos de la siguiente manera:

  • Al comparar un número y una cadena, la cadena se convierte en un valor numérico. JavaScript intenta convertir el literal numérico de cadena a un valor de tipo Number. Primero, un valor matemático se deriva del literal numérico de cadena. A continuación, este valor se redondea al valor de tipo Number más cercano.
  • Si uno de los operandos es Boolean, el operando Boolean se convierte en 1 si es true y +0 si es false.
  • Si un objeto se compara con un número o cadena, JavaScript intenta devolver el valor predeterminado para el objeto. Los operadores intentan convertir el objeto a un valor primitivo, un valor String o Number, utilizando los métodos valueOf y toString de los objetos. Si falla este intento de convertir el objeto, se genera un error de tiempo de ejecución.
  • Tenga en cuenta que un objeto se convierte en una primitiva si, y solo si, su comparando es una primitiva. Si ambos operandos son objetos, se comparan como objetos, y la prueba de igualdad es verdadera solo si ambos refieren el mismo objeto.

Nota: Los objetos de cadena son Tipo Objeto, no String! Los objetos de cadena rara vez se utilizan, por lo que los siguientes resultados pueden ser sorprendentes: