Должен ли я использовать "hasClass" перед "addClass"?

Я столкнулся с следующим script, который проверяет, имеет ли элемент класс a, а если нет, добавляет его:

if (!$("div").hasClass("a")){
   $("div").addClass("a");
}

Поскольку jQuery не добавит класс, если он уже существует, его можно было бы изменить на:

$("div").addClass("a");

Однако есть ли улучшения производительности с помощью hasClass во-первых, или это с использованием того же метода, который addClass делает в любом случае и, следовательно, дублирует логику?

Ответ 2

В исходном коде вы можете увидеть: https://github.com/jquery/jquery/blob/master/src/attributes/classes.js#L38-L45, что они проверяют, существует ли класс при использовании addClass.

Поэтому нет смысла использовать .hasClass() в этом случае.. (исключение было бы, если бы вы хотели выполнить больше действий, если у элемента не было класса.)

Ответ 3

Для того, что стоит, в моем ограниченном тестировании есть улучшение производительности с .hasClass(): http://jsperf.com/jquery-hasclass-vs-addclass-and-removeclass

Однако, даже если автономный .removeClass() в Chrome несколько раз работает медленнее, он работает примерно в 70 000 операций в секунду.