jQuery .hasClass()vs .is()

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

$('#foo').hasClass('bar'); 

要么

 $('#foo').is('.bar'); 

更新:

我在一个评论和四个赞扬评论之后做了一个testing。 事实certificate,我所说的是正确的答案。 结果如下:

在这里输入图像描述

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


is多用途的,你可以做的is('.class')is(':checked')等等,这意味着有更多的事情hasClass是有限的,只有检查一个类正在设置或不。

因此,如果在任何级别的性能是您的优先事项, hasClass应该更快。

由于ishasClass更通用,并使用filter来处理提供的expression式,所以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(); 

我有:

  • 使用的是:3191.663ms
  • 使用时间:2362.523ms

没有什么太大的差别,但是如果你正在进行大量的testing,这可能是相关的。

编辑时,我说“没有太大的差异,我的观点是,你需要做10000个周期才能看到差异的0.8s。 看到一个web应用程序,我们会惊讶地发现,从hasClass转换到hasClass将会在所有的性能上有显着的改善。 不过,我承认速度提高了35%。

在性能方面两者应该相当接近,但是$('#foo').hasClass('bar'); 对我来说似乎更具可读性和语义上的正确性。

.hasClass.hasClass快得多。你可以从这里testing它。 根据你的情况改变testing用例。