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.

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.

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:
// true, ya que ambos operandos son de tipo String (es decir, primitivas de cadena): 
'foo' === 'foo'

var a = new String('foo');
var b = new String('foo');

// false como a y b son tipo Objeto y referencia a diferentes objetos
a == b 

// false como a y b son tipo Objeto y referencia a diferentes objetos
a === b 

// true como a y 'foo' son de tipo diferente y, el Objeto (a) 
// se convierte en cadena 'foo' antes de la comparación
a == 'foo'

Especificaciones

Especificación Estado Comentario
ECMAScript 1st Edition (ECMA-262) Standard Definición inicial. Implementado en JavaScript 1.0
ECMAScript 3rd Edition (ECMA-262) Standard

Agrega ===!== operadores. Implementado en JavaScript 1.3

ECMAScript 5.1 (ECMA-262) Standard

Definido en varias secciones de la especificación: Operadores Relacionales, Operadores de Igualdad

ECMAScript 2015 (6th Edition, ECMA-262) Standard

Definido en varias secciones de la especificación: Operadores Relacionales, Operadores de Igualdad

ECMAScript Latest Draft (ECMA-262) Draft

Definido en varias secciones de la especificación: Operadores Relacionales, Operadores de Igualdad

Compatibilidad con navegadores

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Equality (a == b) Si Si1 Si Si Si
Inequality (a != b) Si Si1 Si Si Si
Identity (a === b) Si Si1 Si Si Si
Non-identity (a !== b) Si Si1 Si Si Si
Greater than (a > b) Si Si1 Si Si Si
Greater than or equal (a >= b) Si Si1 Si Si Si
Less than (a < b) Si Si1 Si Si Si
Less than or equal (a <= b) Si Si1 Si Si Si
FeatureAndroid webviewChrome para AndroidEdge mobileFirefox para AndroidOpera AndroidiOS SafariSamsung Internet
Equality (a == b) Si Si Si4 Si Si Si
Inequality (a != b) Si Si Si4 Si Si Si
Identity (a === b) Si Si Si4 Si Si Si
Non-identity (a !== b) Si Si Si4 Si Si Si
Greater than (a > b) Si Si Si4 Si Si Si
Greater than or equal (a >= b) Si Si Si4 Si Si Si
Less than (a < b) Si Si Si4 Si Si Si
Less than or equal (a <= b) Si Si Si4 Si Si Si

Ver también

Etiquetas y colaboradores del documento

Colaboradores en esta página: lajaso, mfuentesg
Última actualización por: lajaso,