polyfill
的概念:用于实现浏览器并不支持原生 API 的代码。
下面举一个例子: document.querySelectorAll()
现在大多数浏览器都已经支持该方法,但是仍然存在一些比较老的版本的浏览器不支持该方法,此时如果写一个库,通过对该库的引用,从而使得浏览器可以和其他浏览器一样使用该方法,此时这个库就是 polyfill
。
那么我们要知道 jquery
不知 polyfill
,因为 jquery
主要在封装一些 api
, 而 polyfill
的本质是 抹平不同浏览器的api之间的差异,而不是自己实现新的api
。已经存在的polyfill
1、polymer
: 让旧的浏览器可以使用 HTML5
中的 Web Component
的 polyfill
。2、FlushCanvas
:是让无法使用的 canvas
的浏览器使用 canvas
。
polyfill 和 shim 的区别:
一个 shim 是一个库,它将一个新的 API 引入到一个旧的环境中,而且仅靠旧环境中已有的手段实现。
一个 polyfill 就是一个用在浏览器 API 上的 shim。