在JavaScript的世界里,有两个词经常被提到,shim 和 polyfill,它们指的都是什么,又有什么区别?
首先 shim 和 polyfill 都是为了解决环境兼容性,利用旧环境的现有 API 实现一些新的、当前环境不支持的特性。 其中 polyfill 特指新 API 是遵循标准的。
举个栗子:jQuery 的 $.ajax 利用 XMLHttpRequest 对象和 ActiveXObject 对象实现了浏览器的 Ajax 兼容,所以它是一个 shim,因为新的 API 也就是 $.ajax 是非标准的,那么 polyfill
的解决方案是 window.XMLHttpRequest = xxx;
资料参考:JS解惑-shim、polyfill 和 vanilla