Начиная с jQuery 1.6, вы можете использовать .is
. Ниже приводится ответ более года назад ...
var a = $('#foo');
var b = a;
if (a.is(b)) {
// the same object!
}
Если вы хотите увидеть, являются ли две переменные на самом деле одним и тем же объектом, например:
var a = $('#foo');
var b = a;
... тогда вы можете проверить их уникальные идентификаторы. Каждый раз, когда вы создаете новый объект jQuery, он получает идентификатор.
if ($.data(a) == $.data(b)) {
// the same object!
}
Хотя то же самое может быть достигнуто с помощью простого a === b
, вышеприведенное может, по крайней мере, показать следующему разработчику, что именно вы тестируете.
В любом случае, это, вероятно, не то, что вы ищете. Если вы хотите проверить, содержат ли два разных объекта jQuery один и тот же набор элементов, вы можете использовать это:
$.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;
};
Источник
var a = $('p');
var b = $('p');
if (a.equals(b)) {
// same set
}
A.selector === B.selector && A.context === B.context
. Часто контекст всегда будет одинаковым, поэтому нам нужно рассмотреть только селектор.$(':first')
и$('*:first')
equals
функция, кажется, чувствительна к порядку. что-то вроде stackoverflow.com/a/29648479 будет работать в большем количестве случаев, хотя и медленнее.Если вы все еще не знаете, вы можете вернуть исходный объект:
потому что
$("#deviceTypeRoot")
также возвращает массив объектов, которые селектор выбрал.источник
true
, поскольку вы сравниваете ссылку на элемент DOM,==
vs===
даст вам одинаковые результаты (нет необходимости в приведении типа, это всего лишь две ссылки на объект)$.fn.equals(...)
Решение, вероятно , самый чистый и самый элегантный один.Я пробовал что-то быстрое и грязное, как это:
Это, вероятно, дорого, но удобно то, что он неявно рекурсивный, а элегантное решение - нет.
Просто мои 2 цента.
источник
{a: 1, b: 2}
и{b: 2, a: 1}
это вернется,false
когда он должен вернутьсяtrue
.Вообще говоря, плохая идея сравнивать $ (foo) с $ (foo), поскольку это функционально эквивалентно следующему сравнению:
Конечно, вы никогда не ожидаете «провала двигателя JS». Я использую «$» только для того, чтобы понять, что делает jQuery.
Всякий раз, когда вы вызываете $ ("# foo"), вы фактически делаете jQuery ("# foo"), который возвращает новый объект . Поэтому сравнивать их и ожидать того же объекта не правильно.
Однако то, что вы МОЖЕТЕ сделать, может быть что-то вроде:
Так что на самом деле вам, возможно, следует сравнить элементы ID объектов jQuery в вашей реальной программе, что-то вроде
более уместно.
источник
Используйте метод Underscore.js isEqual http://underscorejs.org/#isEqual
источник
Сначала упорядочите ваш объект на основе ключа, используя эту функцию
Затем сравните строковую версию вашего объекта, используя эту функцию
Предполагая, что ключи объектов упорядочены по-разному и имеют одинаковые значения
источник
Если вы хотите проверить, что содержимое равно или нет, просто используйте JSON.stringify (obj)
Например, var a = {key: val};
var b = {key: val};
JSON.stringify (a) == JSON.stringify (b) -----> Если содержимое одинаковое, вы получите истину.
источник