9

我正在从事的一个项目将 IE8 作为硬性要求。我们可能希望使用 Traceur 开始使用 ES6 的一些改进语法,但我知道它会产生 ES5IE8 不支持。鉴于我可以使用es5shim修补 IE8 ,哪些Traceur 支持的 ES6 功能可以安全使用?

更具体地说,我想知道哪些特征映射总是直接映射到完全兼容的代码(大概是大部分糖),哪些特征由于 shim 的限制而在行为上不匹配,哪些完全不可用

4

1 回答 1

10

总结:如果需要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 行代码

于 2014-06-04T20:27:30.633 回答