jQuery .hasClass()vs .is()

Ome*_*ari 93 jquery

从性能的角度来看,是否有一种确定元素是否被赋予类别的首选方法?

$('#foo').hasClass('bar');
Run Code Online (Sandbox Code Playgroud)

要么

$('#foo').is('.bar');
Run Code Online (Sandbox Code Playgroud)

Sar*_*raz 162

更新:

我在评论之后做了一次测试,并且四次赞成评论.事实证明,我所说的是正确的答案.结果如下:

在此输入图像描述

http://jsperf.com/hasclass-vs-is-so


is多用,可以例如做is('.class'),is(':checked')等等,这意味着is更多的事情要做其中hasClass其被设置或被不仅一类检查是有限的.

因此,hasClass如果任何级别的表现是您的首要任务,那么应该更快.

  • @Kris:是的,我这样做:http://jsperf.com/hasclass-vs-is-so.正如我所说,'hasClass`***更快***. (15认同)
  • 你有证据证明它更快吗?仅仅因为函数具有较少的功能并不意味着它会自动更快. (7认同)
  • '快得多'=>'快得多' (4认同)

Dan*_*umb 13

由于is比处理提供的表达式更通用hasClass并且用于filter处理提供的表达式,因此似乎hasClass更快.

我从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();
Run Code Online (Sandbox Code Playgroud)

我有:

  • usingIs:3191.663ms
  • 使用地点:2362.523ms

没有太大的区别,但如果您正在进行大量测试,则可能是相关的.

当我说'没有太大差异时编辑,我的观点是你需要做10000个周期才能看到0.8的差异.我很惊讶地看到一个Web应用程序,从切换ishasClass将会看到所有性能的显着改善.但是,我承认速度提高了35%.


Dar*_*rov 9

两者在性能方面应该非常接近,但$('#foo').hasClass('bar');对我来说似乎更具可读性和语义.


Gau*_*rav 7

.hasClass.is 你从这里测试它快得多.根据您更改测试用例.