• Babel与Polyfill的关系和区别


      推荐阅读 Babel教程

    以下是2018年1月的旧文

    ----------------------------------------------------------------

           很多同学搞不清楚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等打包工具把代码打包用。

      

  • 相关阅读:
    shell脚本查找tcp过多ip地址封掉
    tomcat日志传参乱码问题
    nginx部署vue跨域proxy方式
    nginx部署VUE跨域访问api
    springboot2.1.3 + redisTemplate + Lock 操作 redis 3.0.5
    java8 lamb表达式对List排序
    Mysql5.7降级到5.6遇到的坑
    mac中git使用
    mac中git flow使用
    mac安装openjdk8-maven-mysql-git-docker
  • 原文地址:https://www.cnblogs.com/zhansu/p/8305081.html
Copyright © 2020-2023  润新知