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.keys
Object.seal
¹Object.freeze
¹Object.preventExtensions
¹Object.isSealed
¹Object.isFrozen
¹Object.isExtensible
¹Object.getOwnPropertyDescriptor
¹Object.getOwnPropertyNames
¹Array.isArray
Array.prototype.indexOf
Array.prototype.lastIndexOf
Array.prototype.every
Array.prototype.some
Array.prototype.forEach
Array.prototype.filter
Array.prototype.map
Array.prototype.reduce
Array.prototype.reduceRight
Date.now
Date.prototype.toISOString
Function.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.is
Object.setPrototypeOf
String.prototype.startsWith
³String.prototype.endsWith
³String.prototype.repeat
³Array.from
³Array.prototype.find
³Array.prototype.findIndex
³Array.prototype.fill
Number.isInteger
另参考
ECMAScript 7(ECMAScript 2016)
目前(2017)没有完全支持 ECMAScript 7 的浏览器。需导入:
import "util/shim/es7-shim";
补丁包含了以下 ECMAScript 7 新增的接口:
Object.values
Object.entries
Array.prototype.includes
String.prototype.padStart
String.prototype.padEnd
String.prototype.trimLeft
String.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 新增的接口时自动打补丁,可参考相关文档。
另参考