Object.is()

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.
Standard Definição inicial.
ECMAScript 2017 Draft (ECMA-262)
The definition of 'Object.is' in that specification.
Draft  

Compatibilidade com navegador

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,