--- title: Operadores de comparação slug: >- conflicting/Web/JavaScript/Reference/Operators_0d2e4b8154642b5a9dbd76a2a48cf96a tags: - Comparando String - Comparação - Igualdade - Operadores - Relacionais translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Comparison_Operators original_slug: Web/JavaScript/Reference/Operators/Operadores_de_comparação ---
{{jsSidebar("Operators")}}

O JavaScript possui comparações estritas e conversão de tipos. Uma comparação estrita (e.g., ===) somente é verdade se os operandos forem do mesmo tipo e de conteúdo correspondente. A comparação abstrata mais comumente utilizada (e.g. ==) converte os operandos no mesmo tipo antes da comparação. Para comparações abstratas relacionais (e.g., <=), os operandos são primeiro convertidos em primitivos, depois para o mesmo tipo, depois comparados.

Strings são comparadas baseadas na ordenação lexicografica padrão, usando valores Unicode.

{{EmbedInteractiveExample("pages/js/expressions-comparisonoperators.html")}}

Características de comparação:

Operadores de Igualdade 

Igualdade (==)

O operador de igualdade converte o operando se ele não for do mesmo tipo, então aplica a comparação estrita. Se ambos os operandos são objetos, então o JavaScript compara referencias internas que são iguais quando os operandos se referem ao mesmo objeto em memória.

Sintaxe

x == y

Exemplos

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

Desigualdade (!=)

O operador de desigualdade retorna true (verdade) se os operandos não são iguais. Se os dois operandos não são do mesmo tipo, o JavaScript tenta converter os operandos para o tipo apropriado para a comparação. Se ambos os operandos são objetos, então o JavaScript compara referências internas que não são iguais quando os operandos se referem a objetos diferentes na memória.

Sintaxe

x != y

Exemplos

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

Identidade / igualdade estrita (===)

O operador de identidade retorna true (verdade) se os operandos são estritamente iguais (veja acima) sem conversão de tipo

Sintaxe

x === y

Exemplos

3 === 3   // verdade
3 === '3' // falso
var object1 = {'key': 'value'}, object2 = {'key': 'value'};
object1 === object2 //f also

Non-identity / desigualdade estrita (!==)

O operador desigualdade estrita (Non-identity) retorna verdadeiro se os operandos não são iguais e / ou não são do mesmo tipo.

Sintaxe

x !== y

Exemplos

3 !== '3' // verdade
4 !== 3   // verdade

Operadores relacionais

Cada um desses operadores chamará a função valueOf () em cada operando antes que uma comparação seja feita.

Operador Maior (>)

O operador de Maior retorna true se o operando da esquerda for maior que o operando da direita.

Sintaxe

x > y

Exemplos

4 > 3 // verdade

Operador maior ou igual (>=)

O operador maior ou igual retorna true se o operando da esquerda for maior ou igual ao operando da direita.

Sintaxe

 x >= y

Exemplos

4 >= 3 // verdade
3 >= 3 // verdade

Operador Menor (<)

O operador menor retorna true (verdadeiro) se o operando da esquerda for menor que o operando da direita.

Sintaxe

 x < y

Exemplos

3 < 4 // verdade

Operador menor ou igual (<=)

O operador menor ou igual retorna true (verdadeiro) se o operando da esquerda for menor ou igual ao operando da direita.

Sintaxe

 x <= y

Exemplos

3 <= 4 // verdade

Usando Operadores de Igualdade

Os operadores de igualdade padrão (== e! =) Usam o Algoritmo de Comparação de Igualdade Abstrata 

para comparar dois operandos. Se os operandos forem de tipos diferentes, ele tentará convertê-los para o mesmo tipo antes de fazer a comparação. Por exemplo, na expressão 5 == '5', a sequência à direita é convertida em {{jsxref ("Number" )}} antes da comparação ser feita.

Os operadores de igualdade estrita (=== e! ==) usam o Algoritmo de comparação estrita de igualdade e se destinam a executar comparações de igualdade em operandos do mesmo tipo. Se os operandos são de tipos diferentes, o resultado é sempre falso, então 5! == '5'.

Use operadores de igualdade estrita se os operandos precisarem ser de um tipo específico e também de valor ou se o tipo exato dos operandos for importante. Caso contrário, use os operadores de igualdade padrão, que permitem comparar a identidade de dois operandos, mesmo que não sejam do mesmo tipo.

Quando a conversão de tipos está envolvida na comparação (por exemplo, comparação não estrita), o JavaScript converte os tipos {{jsxref ("String")}}, {{jsxref ("Number")}}, {{jsxref ("Booleano" )}} ou {{jsxref ("Object")}}) operandos da seguinte forma:

Nota: Os objetos String são do Tipo Objeto, não String! Os objetos de string raramente são usados, portanto, os seguintes resultados podem ser surpreendentes:
// true, pois ambos os operandos são do tipo String (ou seja, primitivos de string):
'foo' === 'foo'

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

// falso (false) pois a e b, embora do tipo "Objeto", são instâncias diferentes
a == b

// falso (false) pois a e b, embora do tipo "Objeto", são instâncias diferentes
a === b

// verdadeiro (true) pois o objeto a e 'foo' (String) são de tipos diferentes e, o Objeto (a)
// é convertido para String ('foo') antes da comparação
a == 'foo'

Especificações

Especificação Status Comentário
{{SpecName('ES1')}} {{Spec2('ES1')}} Definição Inicial. Implementado em JavaScript 1.0
{{SpecName('ES3')}} {{Spec2('ES3')}} Adicionandos os operadores === e !== . Implementado em JavaScript 1.3
{{SpecName('ES5.1', '#sec-11.8')}} {{Spec2('ES5.1')}} Definidos em várias seções das especificações: Operadores Relacionais , Operadores de Igualdade
{{SpecName('ES6', '#sec-relational-operators')}} {{Spec2('ES6')}} Definidos em várias seções das especificações: Operadores Relacionais , Operadores de Igualdade
{{SpecName('ESDraft', '#sec-relational-operators')}} {{Spec2('ESDraft')}} Definidos em várias seções das especificações: Operadores Relacionais , Operadores de Igualdade

Compatilidade entre navegadores

{{Compat("javascript.operators.comparison")}}

Consulte também