Desde o jQuery 1.6, você pode usar .is
. Abaixo está a resposta de mais de um ano atrás ...
var a = $('#foo');
var b = a;
if (a.is(b)) {
// the same object!
}
Se você deseja ver se duas variáveis são realmente o mesmo objeto, por exemplo:
var a = $('#foo');
var b = a;
... então você pode verificar seus IDs exclusivos. Toda vez que você cria um novo objeto jQuery, ele recebe um ID.
if ($.data(a) == $.data(b)) {
// the same object!
}
Embora, o mesmo possa ser alcançado com um simples a === b
, o acima pode pelo menos mostrar ao próximo desenvolvedor exatamente o que você está testando.
De qualquer forma, provavelmente não é isso que você procura. Se você quiser verificar se dois objetos jQuery diferentes contêm o mesmo conjunto de elementos, você pode usar isso:
$.fn.equals = function(compareTo) {
if (!compareTo || this.length != compareTo.length) {
return false;
}
for (var i = 0; i < this.length; ++i) {
if (this[i] !== compareTo[i]) {
return false;
}
}
return true;
};
Fonte
var a = $('p');
var b = $('p');
if (a.equals(b)) {
// same set
}
A.selector === B.selector && A.context === B.context
. Muitas vezes, o contexto sempre será o mesmo, portanto, precisamos considerar apenas o seletor.$(':first')
e$('*:first')
equals
função parece ser sensível à ordem. algo como stackoverflow.com/a/29648479 funcionaria em mais casos, embora seja mais lento.Se você ainda não sabe, pode recuperar o objeto original:
porque
$("#deviceTypeRoot")
também retorna uma matriz de objetos que o seletor selecionou.fonte
true
, porque você está comparando a referência do elemento DOM,==
vs===
lhe dará os mesmos resultados (nenhum tipo de coerção necessários, eles são apenas duas referências de objeto)A
$.fn.equals(...)
solução é provavelmente a mais limpa e elegante.Eu tentei algo rápido e sujo como este:
Provavelmente é caro, mas o mais confortável é que é implicitamente recursivo, enquanto a solução elegante não é.
Apenas meus 2 centavos.
fonte
{a: 1, b: 2}
e{b: 2, a: 1}
isso retornaráfalse
quando deve retornartrue
.Geralmente, é uma má idéia comparar $ (foo) com $ (foo), pois isso é funcionalmente equivalente à seguinte comparação:
É claro que você nunca esperaria "erro no motor JS". Eu uso "$" apenas para deixar claro o que o jQuery está fazendo.
Sempre que você chama $ ("# foo"), está realmente fazendo um jQuery ("# foo") que retorna um novo objeto . Portanto, compará-los e esperar o mesmo objeto não está correto.
No entanto, o que você pode fazer é algo como:
Então, na verdade, você talvez deva comparar os elementos de identificação dos objetos jQuery no seu programa real, para algo como
é mais apropriado.
fonte
Use o método isEqual de Underscore.js http://underscorejs.org/#isEqual
fonte
Primeiro ordene seu objeto com base na chave usando esta função
Em seguida, compare a versão rigorosa do seu objeto, usando esta função
Supondo que as chaves dos objetos sejam ordenadas de forma diferente e tenham os mesmos valores
fonte
Se você deseja verificar se o conteúdo é igual ou não, basta usar JSON.stringify (obj)
Por exemplo - var a = {chave: val};
var b = {chave: val};
JSON.stringify (a) == JSON.stringify (b) -----> Se o conteúdo for o mesmo, você será verdadeiro.
fonte