为什么Babel需要一个polyfill而不是默认的transpile一些方法?

yzuktlbb  于 2022-12-08  发布在  Babel
关注(0)|答案(1)|浏览(158)

我一直在学习如何在Javascript中使用babel,我理解了带有预设“env”的babel将更高版本的ES移植到ES5中的想法。然而,我遇到了一个场景,其中数组“include”方法根本没有被babel更改,并且在IE11上不起作用,为了解决这个问题,我读到有一个可以使用的babel polyfill。
我曾经遇到过一个试图解释这个问题的答案,但是我完全没有理解它。有人能简单地解释一下为什么babel默认情况下不能处理所有的ES transpilations,而需要一个polyfill吗?
如果我理解正确的话,polyfill是一种旨在填补空白的东西,使一些不受支持的东西工作,但我认为这是Babel默认的工作。

wswtfjt7

wswtfjt71#

polyfill使用旧版本的语言来实现新的特性。例如,Babel通过在ES5中实现方法来支持ES6 array.includes

Array.prototype.includes = function(val) { 
    return this.indexOf(val) >= 0;
}

另一方面,babel的核心库是一个transpiler,它负责将新版本javascript的特性转换为旧版本javascript的特性,而这些特性在旧版本javascript中无法通过编写polyfill来实现。例如,要编写polyfill将ES5的letconst转换为var是不可能的。或者将箭头函数转换为传统函数。像这样的操作需要一个transpiler来遍历代码并转换它。

相关问题