Скажем, у вас есть веб-сайт из 100 страниц, и есть div с идентификатором # unique-div, который появляется только на странице 5.html, но не на других 99 страницах, и для вас просто просто, с примером, который у вас есть JS файл, который загружается на все страницы и внутри него:
var uniqueDiv = $('#unique-div');
uniqueDiv.addClass('random-class');
имеет ли это какое-либо негативное влияние любым возможным способом (например, производительность)? Было бы лучше сначала проверить длину?
var uniqueDiv = $('#unique-div');
if ( uniqueDiv.length ) {
uniqueDiv.addClass('random-class');
}
Если да, то почему?
Или, если вы цепляете объекты вроде этого:
var uniqueDiv = $('#unique-div');
someVar.add(moreVars).add(uniqueDiv).addClass('random-class');
Если объект не существует, что происходит?
Я пробовал это посмотреть, но я всегда задавался этим вопросом.
Ответ любой метод jQuery лежит на "правильном" поведении, если в текущем объекте jQuery есть 0, 1 или более чем один объект DOM. Итак, до тех пор, пока вы не используете некоторые сломанные методы подключаемого модуля jQuery, вам не нужно проверять длину перед вызовом метода, и это включает ситуации, когда вы используете цепочку.
Таким образом, в вашем случае это было бы прекрасно, даже если вы и не подозревали, действительно ли существует #unique-div
:
$('#unique-div').addClass('random-class');
Если div не существует, метод .addClass()
просто ничего не сделает.
Обратите внимание: некоторые методы, которые извлекают значение, такое как .val()
, кодируются только для работы с первым элементом DOM в объекте jQuery, и вам придется проверять с помощью отдельного метода, как то, что они закодированы для возврата, если есть нет объектов DOM в объекте jQuery. Например, .val()
вернет undefined
если в объекте jQuery нет объектов DOM.
Там может быть некоторое бесконечно малое количество сбережений, но это действительно незначительно. Вероятно, в вашем коде будет много раз, вы будете делать цикл через массив, подтверждая, что длина может быть равна нулю.
Объекты JQuery всегда имеют для них некоторый размер, и все методы, которые я знаю (т.е. AddClass), для пустых наборов, поэтому я не вижу никаких проблем с пропуском проверки длины.
if($('#unique-element').length){ ... }