String.prototype.includes未转换为ES5

17

在将ES6编译成ES5时(使用CLI Babel 5.0.9),String.prototype.includes函数保持不变。

如果这是常见问题,很抱歉我已经彻底搜索了。

1个回答

11

Babel可以将ES6语法转换为ES5语法。是否加载polyfill以便使用新的ES6库函数由您决定。通常,您可以使用以下方式完成:

import 'babel/polyfill';

1
Babel是一种语法转换器,它不会自动添加polyfill,因为加载哪个polyfill完全取决于用户。如果您只使用现代浏览器,则“/polyfill”可能过度了,因为它是最广泛的polyfill。 - loganfsmyth
1
这是很实际的想法。但是,也有一种情况可以为将ES6(根据ECMA-262 6的全部内容)转换为ES5的工具进行辩护,您可以独立于浏览器使用它(假设它当然涵盖了所有ES5),并且不要求您指定使用规范的哪些部分,而只是转换您使用的任何新的ES6语法或函数。 - UnluckyPaladin
理想情况下,我甚至不需要知道什么是 polyfill。我只需运行 babel *.js,babel 就会在输出 ES5 时添加所需的函数实现,仅在第一个文件的开头添加一次即可。 - UnluckyPaladin
但是String.prototype.includes是一个全局变量,因此在每个文件的顶部注入它将不断覆盖现有的全局变量,或者是没有效果的额外代码。如果您想聊天,请随时加入Babel Slack频道,我认为SO评论不是讨论这个问题的好方法。 - loganfsmyth
1
这个答案已经不再适用了,15.12.19的版本是正确的。String includesArray includes以及许多其他方法不属于Babel preset-env。这意味着它们没有被转译,并且在IE10/11中会引发错误。此外,@babel/polyfill已被弃用,其文档已完全损坏... 如果有人知道一种清晰优雅的方法来导入Babel没有的像字符串includes这样的polyfill,我很想了解您所采取的方法。 - greensin
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接