Polyfill 是一段代码,用于在现代浏览器中实现浏览器原生不支持的功能。
core-js
:提供ES5、ES6+标准库的polyfillbabel-polyfill
(已弃用,现为core-js + regenerator-runtime)whatwg-fetch
:为旧浏览器提供fetch APIintersection-observer
:提供IntersectionObserver API// 如果浏览器不支持Array.prototype.includes
if (!Array.prototype.includes) {
Array.prototype.includes = function(element) {
// 实现代码
};
}
转译器是将新版本JavaScript代码转换为旧版本JavaScript代码的工具。
// 输入 (ES6+)
const fn = (x) => x * 2;
// 输出 (ES5)
var fn = function(x) {
return x * 2;
};
特性 | Polyfill | 转译器 |
---|---|---|
作用对象 | API/功能 | 语法 |
执行时机 | 运行时 | 编译时 |
典型工具 | core-js, whatwg-fetch | Babel, TypeScript, SWC |
解决什么问题 | 缺失的全局对象/方法 | 不被支持的语法 |
通常两者结合使用:
// babel.config.js
module.exports = {
presets: [
[
'@babel/preset-env',
{
useBuiltIns: 'usage', // 按需引入polyfill
corejs: 3, // 指定core-js版本
targets: "> 0.25%, not dead" // 浏览器兼容目标
}
]
]
};