Traceur在多大程度上编译为兼容IE8的Javascript?

时间:2014-06-04 18:53:50

标签: javascript internet-explorer-8 cross-browser traceur

我正在研究的项目将IE8作为一项硬性要求。我们希望使用Traceur开始使用ES6的一些改进语法,但我知道it produces ES5not supported by IE8。鉴于我可以使用es5shim修补IE8,Traceur-supported ES6 features可以安全使用?

更具体地说,我想知道哪些功能地图总是直接映射到完全兼容的代码(可能是糖的大部分),由于垫片的限制而导致行为不匹配,并且不可用共

1 个答案:

答案 0 :(得分:10)

摘要:如果您需要IE8支持,请不要使用Traceur

不可能完全支持IE8中的Traceur编译代码,因为它very poor ES5 compatibility cannot be patched completely even with known polyfills like es5shim

你可能会得到一些Traceur编译的代码在IE 8中工作,但据我所知,这是一个非常未开发的空间。我所知道的这类尝试的唯一参考之一是跟踪关于"old IE support"的traceur的github回购中的一个未解决的问题。

从工程的角度来看,我认为在生产中使用Traceur + ES5垫片组合是一个非常糟糕的主意。您不仅需要处理从ES6-> ES5中引发的潜在问题,而且还必须解决因ES5多层填充错误而导致的错误,这两种问题都很可能发生。


将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。 The resulting IE8-compliant code in this case is roughly around 50 lines of code