O método Object.is() determina se dois valores correspondem ao mesmo valor.

Sintaxe

Object.is(value1, value2);

Parâmetros

value1
O primeiro valor a ser comparado.
value2
O segundo valor a ser comparado.

Return value

Um Boolean indicando se os dois argumentos possuem o mesmo valor ou não.

Descrição

Object.is() determina se dois valores correspondem ao mesmo valor. Dois valores correspondem ao mesmo valor se uma das seguintes condições for verdadeira:

  • ambos são undefined
  • ambos são null
  • ambos são true ou ambos são false
  • ambos são strings do mesmo comprimento, com os mesmos caracteres
  • ambos são o mesmo objeto
  • ambos são numéricos e
    • ambos são +0
    • ambos são -0
    • ambos são NaN
    • ou ambos são não-zero e ambos são não NaN e ambos correspondem ao mesmo valor

Isso não é o mesmo que ser igual de acordo com o operador ==. O operador == aplica diversas coerções para ambos os lados (se eles não correspondem ao mesmo Tipo) antes de testar a igualdade (resultando em comportamentos como a comparação "" == false retornar true), enquanto Object.is não realiza a coerção de nenhum dos valores.

Isso também não é o mesmo que ser igual de acordo com o operador ===. O operador === (assim como o operador ==) trata os valores numéricos -0 e +0 como iguais e trata Number.NaN como não igual a NaN.

Exemplos

Object.is('foo', 'foo');     // true
Object.is(window, window);   // true

Object.is('foo', 'bar');     // false
Object.is([], []);           // false

var test = { a: 1 };
Object.is(test, test);       // true

Object.is(null, null);       // true

// Casos especiais
Object.is(0, -0);            // false
Object.is(-0, -0);           // true
Object.is(NaN, 0/0);         // true

Polyfill para navegadores que não suportam ES6

Object.is() é uma adição proposta ao padrão ECMA-262; e como tal, pode não estar presente em todos os navegadores. Você pode contornar essa situação por meio da adição do seguinte código no começo de seus scripts. Isso permitirá a você utilizar Object.is(), mesmo quando não houver suporte por parte do navegador.

if (!Object.is) {
  Object.is = function(x, y) {
    // Algoritmo para verificar se os valores sao iguais
    if (x === y) { // Passos 1-5, 7-10
      // Passos 6.b-6.e: +0 != -0
      return x !== 0 || 1 / x === 1 / y;
    } else {
      // Passo 6.a: NaN == NaN
      return x !== x && y !== y;
    }
  };
}

Especificações

Especificação Status Comentário
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Object.is' in that specification.
Padrão Definição inicial.
ECMAScript Latest Draft (ECMA-262)
The definition of 'Object.is' in that specification.
Rascunho  

Compatibilidade com navegador

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Recurso Chrome Firefox (Gecko) Internet Explorer Opera Safari
Suporte básico 30 22 (22)

Não suportado

(Yes) 9
Recurso Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Suporte básico Não suportado ? 22.0 (22) Não suportado Não suportado 9

Veja também

Etiquetas do documento e colaboradores

Colaboradores desta página: amaralbf
Última atualização por: amaralbf,