我正在从事的一个项目将 IE8 作为硬性要求。我们可能希望使用 Traceur 开始使用 ES6 的一些改进语法,但我知道它会产生 ES5,IE8 不支持。鉴于我可以使用es5shim修补 IE8 ,哪些Traceur 支持的 ES6 功能可以安全使用?
更具体地说,我想知道哪些特征映射总是直接映射到完全兼容的代码(大概是大部分糖),哪些特征由于 shim 的限制而在行为上不匹配,哪些完全不可用
我正在从事的一个项目将 IE8 作为硬性要求。我们可能希望使用 Traceur 开始使用 ES6 的一些改进语法,但我知道它会产生 ES5,IE8 不支持。鉴于我可以使用es5shim修补 IE8 ,哪些Traceur 支持的 ES6 功能可以安全使用?
更具体地说,我想知道哪些特征映射总是直接映射到完全兼容的代码(大概是大部分糖),哪些特征由于 shim 的限制而在行为上不匹配,哪些完全不可用
总结:如果需要IE8支持,不要使用Traceur
无法在 IE8 中获得对 Traceur 编译代码的完全支持,因为它的ES5 兼容性非常差,即使使用已知的 polyfill (如 es5shim)也无法完全修补。
不过,您可能会得到一些 Traceur 编译的代码在 IE 8 中工作,但据我所知,这是一个非常未开发的空间。我所知道的对此类尝试的唯一引用之一是 traceur 的 github 存储库中有关“旧 IE 支持”的一个未解决问题。
从工程的角度来看,我认为在生产中使用 Traceur+ES5 垫片组合是一个非常糟糕的主意。你不仅要处理从 ES6->ES5 引发的潜在问题,还必须解决由于 ES5 polyfills 引起的错误,这两个问题都很可能发生。
将 Traceur 与各种 polyfill 和补丁结合使用也会导致 JavaScript 代码非常臃肿。举个例子,让我们考虑简单的 ES6 生成器和 ES5 的使用Array.prototype.each
:
function* items() {yield new Array(1, 2, 3);}
for (item of items()) {
item.every(function(elem, index, arr) {
console.log(item);
});
}
如果我们想在 IE8 中运行它,我们首先需要使用 Traceur 将其编译为 ES5,然后为 Array.prototype.each 应用一个 polyfill。在这种情况下,生成的符合 IE8 的代码大约是 50 行代码。