JS 兼容补丁util/shim
在低版本浏览器直接使用 ECMAScript 5+ 新增的接口。
ECMAScript 5
移动端和现代浏览器(IE9+)都支持 ECMAScript 5(HTML5 的一部分)。IE 6-8 和 2015 年之前的桌面浏览器需导入:
import "util/shim/es5-shim";补丁包含了以下 ECMAScript 5 新增的接口:
Object.create¹Object.defineProperty¹ ²Object.defineProperties¹ ²Object.getPrototypeOf¹Object.keysObject.seal¹Object.freeze¹Object.preventExtensions¹Object.isSealed¹Object.isFrozen¹Object.isExtensible¹Object.getOwnPropertyDescriptor¹Object.getOwnPropertyNames¹Array.isArrayArray.prototype.indexOfArray.prototype.lastIndexOfArray.prototype.everyArray.prototype.someArray.prototype.forEachArray.prototype.filterArray.prototype.mapArray.prototype.reduceArray.prototype.reduceRightDate.nowDate.prototype.toISOStringFunction.prototype.bind¹JSON.stringify¹JSON.parse¹
¹:补丁仅模拟了该接口的部分功能。
²:受引擎限制,IE6-8 无法模拟 Object.defineProperty,使用了该接口的程序将无法在 IE6-8 运行。
另参考
ECMAScript 6
2016 年之后发布的浏览器(Edge 14+)都支持 ECMAScript 6。其它浏览器需导入:
import "util/shim/es6-shim";项目中一般用不到 ECMAScript 6 的完整功能,建议改用精简后的补丁:
import "util/shim";补丁包含了以下 ECMAScript 6 新增的接口(精简版只包含了其中加 ³ 的接口):
Promise³Object.assign³Object.isObject.setPrototypeOfString.prototype.startsWith³String.prototype.endsWith³String.prototype.repeat³Array.from³Array.prototype.find³Array.prototype.findIndex³Array.prototype.fillNumber.isInteger
另参考
ECMAScript 7(ECMAScript 2016)
目前(2017)没有完全支持 ECMAScript 7 的浏览器。需导入:
import "util/shim/es7-shim";补丁包含了以下 ECMAScript 7 新增的接口:
Object.valuesObject.entriesArray.prototype.includesString.prototype.padStartString.prototype.padEndString.prototype.trimLeftString.prototype.trimRight
另参考
建议
PC 端项目
建议导入 util/shim/es5-shim 和 util/shim,确保 ECMAScript 5 全部和 ECMAScript 6+ 常用接口可用。
移动端项目
ECMAScript 5 在移动端可直接使用,建议导入 util/shim 确保 ECMAScript 6+ 常用接口可用。
Node.js 项目
建议直接升级为 Node.js 6+,可直接使用所有 ECMAScript 6 功能。
打包优化
有些打包插件可以实现在调用 ECMAScript 新增的接口时自动打补丁,可参考相关文档。
另参考