¿Existe un método preferido para determinar si a un elemento se le asigna una clase, desde el punto de vista del desempeño?
$('#foo').hasClass('bar');
o
$('#foo').is('.bar');
¿Existe un método preferido para determinar si a un elemento se le asigna una clase, desde el punto de vista del desempeño?
$('#foo').hasClass('bar');
o
$('#foo').is('.bar');
Respuestas:
Cometí una prueba después de un comentario y cuatro votos a favor para cada comentario. Resulta que lo que dije es la respuesta correcta. Aquí está el resultado:

http://jsperf.com/hasclass-vs-is-so
El ises multipropósito, por ejemplo, puede hacerlo is('.class'), is(':checked')etc., lo que significa que istiene más que ver donde hasClassestá limitado, lo que solo verifica si una clase está configurada o no.
Por lo tanto, hasClassdebería ser más rápido si el rendimiento en cualquier nivel es su prioridad.
hasClass es mucho más rápido.
Dado que ises más genérico que hasClassy se utiliza filterpara procesar la expresión proporcionada, parece probable que hasClasssea más rápido.
Ejecuté el siguiente código desde la consola de Firebug:
function usingIs() {
for (var i=0; i<10000;i++) {
$('div#example-0').is('.test');
}
}
function usingHas(){
for (var i=0; i<10000;i++) {
$('div#example-0').hasClass('test');
}
}
usingIs();
usingHas();
Tengo:
No es una gran diferencia, pero puede ser relevante si está realizando muchas pruebas.
EDITAR cuando digo 'no es una gran diferencia, mi punto es que necesitas hacer 10000 ciclos para ver 0.8s de diferencia. Me sorprendería ver una aplicación web en la que cambiar de isa hasClassvería una mejora significativa en el rendimiento general. Sin embargo, reconozco que se trata de una mejora del 35% en la velocidad.
Ambos deberían ser bastante similares en términos de rendimiento, pero me $('#foo').hasClass('bar');parecen más legibles y semánticamente correctos.