Babel与Polyfill的关系和区别

  很多同学搞不清楚babel与polyfill的关系以及区别,这儿给大家细致解惑。

  Babel:Babel 是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代码。注意:Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 API。有的同学可能分不清哪些是ES6句法,哪些是API,这个暂时先放一放,后面会讲。

  Polyfill:Polyfill的准确意思为,用于实现浏览器并不支持的原生API的代码。

  下面用一个例子来讲:

//使用babel转码前的代码
require('babel-polyfill');
(x => x * 2)(1);
var b = Array.of(1,2,4);
//使用babel转码后的代码
'use strict';

require('babel-polyfill');
(function (x) {
  return x * 2;
})(1);
var b = Array.of(1, 2, 4);

  这个例子中,Babel转换了ES6的箭头函数句法,但对于Array.of并没有转换,因为Array.of是ES6的API。有些同学可能还是不清楚哪些是句法,哪些是API,这个不要紧,我是新人的时候也是花了很长时间才理解的,需要多写代码慢慢体会,潜移默化。对于什么是API,讲一个例子帮助大家理解吧。

if (!Array.of) { 
Array.of = function() { 
return Array.prototype.slice.call(arguments); 
}; 

  我们都知道Array是ES5就存在的一个对象了,但是该对象没有of方法,这个方法就是一个API,但ES6有这个API了。对于不支持ES6的浏览器,我们通过引入babel-polyfill使其支持ES6的API,类似于上面的代码来实现的。

  下面再给一个现实的例子:

  我在旧版浏览器(火狐23.0,2013年发布的)打开下面的页面直接报错(新版的Chrome和火狐不会报错,这两个已经支持ES6)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <!-- <script type="text/javascript" src="polyfill.js"></script> -->
    <script type="text/javascript">
        var b = Array.of(1, 2, 4);
        console.log(b)
    </script>
</body>
</html>

  

  当把Babel官网提供的polyfill.js(就是babel-polyfill)引入后,即反注释上面代码中已经注释掉的polyfill.js,就可以正常运行了。

 

   另外,还有些同学要问,require()怎么转换成ES5啊?其实,浏览器里这个通过Babel是不能转换的,要通过webpack等打包工具把代码打包用。

  

转载于:https://www.cnblogs.com/zhansu/p/8305081.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值