Desde jQuery 1.6, puede usar .is
. A continuación se muestra la respuesta de hace más de un año ...
var a = $('#foo');
var b = a;
if (a.is(b)) {
// the same object!
}
Si desea ver si dos variables son realmente el mismo objeto, por ejemplo:
var a = $('#foo');
var b = a;
... entonces puedes verificar sus identificaciones únicas. Cada vez que crea un nuevo objeto jQuery, obtiene una identificación.
if ($.data(a) == $.data(b)) {
// the same object!
}
Sin embargo, lo mismo podría lograrse con un simple a === b
, lo anterior al menos podría mostrar al próximo desarrollador exactamente lo que está probando.
En cualquier caso, eso probablemente no sea lo que buscas. Si desea verificar si dos objetos jQuery diferentes contienen el mismo conjunto de elementos, puede usar esto:
$.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;
};
Fuente
var a = $('p');
var b = $('p');
if (a.equals(b)) {
// same set
}
A.selector === B.selector && A.context === B.context
. A menudo, el contexto siempre será el mismo, por lo que solo tenemos que considerar el selector.$(':first')
y$('*:first')
equals
función parece ser sensible al orden. algo como stackoverflow.com/a/29648479 funcionaría en más casos, aunque es más lento.Si aún no lo sabe, puede recuperar el objeto original de la siguiente manera:
porque
$("#deviceTypeRoot")
también devuelve una matriz de objetos que el selector ha seleccionado.fuente
true
, porque está comparando la referencia del elemento DOM,==
y===
le dará los mismos resultados (no se necesita coerción de tipo, solo son dos referencias de objeto)La
$.fn.equals(...)
solución es probablemente la más limpia y elegante.He intentado algo rápido y sucio como este:
Probablemente sea costoso, pero lo cómodo es que es implícitamente recursivo, mientras que la solución elegante no lo es.
Solo mis 2 centavos.
fuente
{a: 1, b: 2}
y{b: 2, a: 1}
esto volveráfalse
cuando debería volvertrue
.En general, es una mala idea comparar $ (foo) con $ (foo), ya que es funcionalmente equivalente a la siguiente comparación:
Por supuesto, nunca esperarías un "error en el motor JS". Uso "$" solo para dejar en claro lo que está haciendo jQuery.
Cada vez que llamas a $ ("# foo") en realidad estás haciendo un jQuery ("# foo") que devuelve un nuevo objeto . Entonces compararlos y esperar el mismo objeto no es correcto.
Sin embargo, lo que PUEDES hacer puede ser algo como:
Entonces, realmente debería comparar los elementos de ID de los objetos jQuery en su programa real para que algo así
Es más apropiado.
fuente
Utilice el método Underscore.js isEqual http://underscorejs.org/#isEqual
fuente
Primero ordene su objeto basado en la clave usando esta función
Luego, compare la versión en cadena de su objeto, utilizando esta función
Asumiendo que las claves de los objetos están ordenadas de manera diferente y tienen los mismos valores
fuente
Si desea verificar que el contenido sea igual o no, simplemente use JSON.stringify (obj)
Por ejemplo, var a = {key: val};
var b = {clave: val};
JSON.stringify (a) == JSON.stringify (b) -----> Si el contenido es el mismo, se vuelve verdadero.
fuente