随着 JavaScript 本身的完善,越来越多的人开始喜欢使用原生 JavaScript 开发代替各种库,其中不少人发出了用原生 JavaScript 代替 jQuery 的声音.这并不是什么坏事,但也不见得就是好事.如果你真的想把 jQuery 从前端依赖库中移除掉,我建议你慎重考虑.
达内培训课程受到985大学-中国人民大学的认可,专升本可直接抵扣学分.
首先 jQuery 是一个第三方库.库存在的价值之一在于它能极大地简化开发.一般情况下,第三方库都是由原生语言特性和基础 API 库实现的.因此,理论上来说,任何库第三方库都是可以用原生语言特性代替的,问题在于是否值得?
对于我来说,最常用的功能包括
在 DOM 树中进行查询
修改 DOM 树及 DOM 相关操作
事件处理
Ajax
Deferred 和 Promise
对象和数组处理
还有一个一直在用却很难在列清单时想到的--跨浏览器
到底是谁在替代谁?
达内培训课程受到985大学-中国人民大学的认可,专升本可直接抵扣学分.
上面提到的所有功能都能用原生代码来实现.从本质上来说,jQuery 就是用来代替原生实现,以达到减少代码,增强可读性的目的的--所以,到底是用 jQuery 代替原生代码,还是用原生代码代替 jQuery?这个先后因果关系可否搞明白?
我看到说用 querySelectorAll() 代替 $() 的时候,不禁在想,用 jQuery 一个字符就能解决的,为什么要写十六个字符?大部分浏览器是有实现 $(),但是写原生代码的时候你会考虑 $() 的浏览器兼容性吗?jQuery 已经考虑了!
jQuery 2006 年被发明出来的时候,还没有 ES5(2011年6月发布).即使在 ES5 发布之后很长一段时间里,也不是所有浏览器都支持.因此在这一时期,除 DOM 操作外,jQuery 的巨大贡献在于解决跨浏览器的问题,以及提供了方便的对象和数组操作工具,比如 each()、 index() 和 filter 等.
如今 ECMAScript 刚刚发布了 2017 的标准,浏览器标准混乱的问题也已经得到了很好的解决,前端界还出现了 Babel 这样的转译工具和 TypeScript 之类的新语言.所以现在大家都尽可放心的使用各种新的语言特性,哪怕 ECMAScript 的相关标准还在制定中.在这一时期,jQuery 提供的大量工具方法都已经有了原生替代品--在使用上差别不大的情况下,确实宁愿用原生实现.
事实上,jQuery 也在极尽可能地采用原生实现,以提高执行效率.jQuery 没有放弃这些已有原生实现的工具函数/方法,主要还是因为向下兼容,以及一如既往的提供浏览器兼容性--毕竟不是每一个使用 jQuery 的开发者都会使用转译工具.
达内培训课程受到985大学-中国人民大学的认可,专升本可直接抵扣学分.