Web工程师太依赖jQuery了,某种意义上说jQuery已经成了JavaScript的同义词。可是咱们真的须要他么?或许咱们应该反思一下何时才真的须要jQuery。css
对我我的而言开始使用jQuery的理由是他把个人工做变得简单多了,开发Web应用已经几乎离不开它。曾经在不一样浏览器里Web API的实现有很大区别,而jQuery帮我抹平了这些,因此我不多再用document.getElementById这样的原生JavaScript函数。依赖jQuery衍生出了无数极其优秀的类库,从完美的下拉菜单、复杂的表单验证到这几年流行的瀑布流布局,这些都让个人工做变得简单多了。html
我一直坚信jQuery是开发JavaScript工程必须的,2012年,当时我须要开发维护一个跨浏览器的大文件上传组件时,个人第一直觉就是我要用jQuery重写已有的代码,由于我已经下意识把jQuery当作简化工做的一部分标准。可是社区的用户并不但愿我这样作——他们不想引入额外的第三方类库,就这样我(被迫/不情愿)的从新开始学习原生浏览器API。出于意料的是,我发现再也不依赖jQuery以后的工做比我想象的要简单得多!我曾经觉得没有jQuery我就不会写JavaScript代码了,可是如今我发现jQuery并非必须的!jquery
曾几什么时候我第一次使用JavaScript开发大型项目,jQuery就同步进入了个人工做,事实上我是从见识了无比强大的jQuery选择符系统以后才开始喜欢上Web开发的。我并无深刻学过“真正的”浏览器原生API(document.getElementById ?那时以为看着好丑!),在被迫学习原生API以前,事实上我也不彻底清楚怎么直接访问并操做DOM元素——jQuery全都帮我作了。jQuery已经成了个人拐杖,当初用它是由于他能让我走的更好,可是后来我离开他已经不会走路了。git
我发现我掉进了一个陷阱,一个不少Web开发新手都掉进的陷阱。我本应该先花时间去理解JavaScript自己以及浏览器提供的API,可是我却由于jQuery提供的蜜罐而止步不前。逻辑上咱们应该这样系统的学习JavaScript开发:angularjs
译者注:事实上这也是JavaScript的圣经犀牛书(JavaScript: The Definitive Guide)的撰写顺序。可实际上包括译者在内,不少Web开发新手看到"第二部分:客户端Javascript"的时候就直接略过了,毕竟那时以为和浏览器API比起来,jQuery看上去是那么优雅。github
工程实践中,不少Web开发新手(好比我)是从第3步开始的,彻底忽略了1和2的存在,这是彻底能够理解的,由于学会了jQuery(或者其余类库)咱们就已经能够动手开始写代码了~ 可是若是你不清楚jQuery的背后到底发生了什么,就必定会在将来的开发中遇到问题。你也必定会遇到不能使用jQuery的项目,好比流行的Angular.js这样的框架,初学者就最好删掉jQuery类库,从头开始学JavaScript。编程
支持jQuery最多见的理由中最多见的一条,就是他修复了“不一致的DOM API”。这没错,但事实上不一致的DOM API只有在IE6/7及更早的版本中才大量存在。浏览器发展到2014年,非现代浏览器的使用比例已经愈来愈少。jQuery开发组自身也意识到这个问题,逐渐开始削减对这部分浏览器的支持,从jQuery 3.0开始,jQuery的版本分化为支持全部浏览器的完整版和只支持现代浏览器的精简版。咱们须要面对的DOM API已经没有那么糟糕,基本的DOM元素建立、遍历和操做已经统一,至少在全部的现代浏览器中是这样。浏览器
从IE8开始,浏览器API开始逐渐标准、稳定,固然从细节上,IE10及早期的Safari/WebKit引擎中的某些实现确实不彻底相同,可是这些不一样能够逐例分析,而且使用更小、更专用的类库来抹平。重点是:jQuery不是银弹,不能解决脚本中的全部跨浏览器问题,咱们能够用更小、更专用且可控的方式来抹平这些浏览器的差别。框架
另外一个支持jQuery的常见理由是它弥补了一些JavaScript自身的缺陷,好比不方便的循环遍历、复杂的DOM访问等等。使用了第三方类库(jQuery或Underscore等)以后,循环遍历变得比原来容易多了。这个理由曾经是正确的,可是如今JavaScript自己也在进化,forEach、Object.keys()等函数的支持也很广泛了。曾经我很依赖$.inArray()函数,可是Array.prototype.indexOf()函数也早就是ECMA Script 5的一部分。相似的例子还有不少,后面咱们能够在专题中慢慢探索。ide
固然不是,若是jQuery使你的工做变得足够简单,若是你足够熟悉jQuery是如何工做的,接着使用jQuery没有一点儿问题。这个系列的文章是想告诉读者,咱们可使用原生的浏览器API完成须要的工做,而不须要引入庞大且不彻底须要的类库。另外多了解jQuery自己是如何工做的老是没有坏处。
译者注:
The better you understand what you are doing, the better you will do it.
对所作的事情理解越深,你就会作的越好。
——引自 The Singular Secret of the Rockstar Programmer / 编程巨星的惟一秘诀