zoukankan      html  css  js  c++  java
  • es6那些事儿

    一、参考链接

    http://www.ecma-international.org/ecma-262/6.0/index.html
    http://www.ecma-international.org/ecma-262/7.0/index.html
    http://www.ecma-international.org/ecma-262/8.0/index.html
    http://es6.ruanyifeng.com/
    https://developer.mozilla.org/zh-CN/

    二、安装依赖

    cnpm i -D babel-preset-env babel-loader babel-core babel-polyfill babel-plugin-transform-runtime

    查看浏览器对es6的支持情况

    cnpm i -g es-checker
    es-checker

    三、文件配置

    //webpack.config.js
    module.exports = {
      entry: './index.js',
      output: {
        path: __dirname,
        filename: 'bundle.js'
      },
      devtool: "inline-source-map",
      module: {
        rules: [
          {
            test: /.js$/,
            exclude: /node_modules/,
            use: {
              loader: 'babel-loader'
            }
          }
        ]
      }
    }

     四、 声明变量
    1、关键字
    var
    function
    let
    const
    import
    class
    2、var,let,const
    var声明的变量存在变量提升,会初始化为undefined;
    let声明的变量不存在变量提升,会保持为未初始化的状态。let声明块级作用域,不存在变量提升,暂时性死区(封闭性作用域),不允许重复声明。尽量避免在块级作用域内声明函数,如果确实需要,也应该写函数表达式,而不是写函数声明。
    const声明的变量不是值不能修改,而是变量指向的内存地址不能修改。声明块级作用域,不存在变量提升,暂时性死区(封闭性作用域),不允许重复声明。
    3、全局变量和顶层对象

    顶层对象,在浏览器环境指的是window对象,在Node指的是global对象。es5中,全局变量是顶层对象的属性,es6中不是。

    //获取顶层对象
    var getGlobal = function () {
      if (typeof self !== 'undefined') { return self; }
      if (typeof window !== 'undefined') { return window; }
      if (typeof global !== 'undefined') { return global; }
      throw new Error('unable to locate global object');
    };

    五、变量的解构赋值
    变量的解构赋值,等号右边可能是数组,对象,字符串,数值,布尔值。解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。
    1、数组

    let [a, b, c] = [4, 5, 6];

    只要某种数据结构具有Iterator接口,都可以采用数组形式的解构赋值。

    let [k = 1] = [undefined];
    let [x, y, z] = [1,,5];

    2、对象

    let { m, n } = { m: "aaa", n: "bbb" };
    let { l = "ccc", m = l } = { m: "aaa", n: "bbb" }; //默认值设置成功,m为"aaa"
    let { m: l } = { m: "aaa", n: "bbb" }; // 模式匹配成功,l为"aaa"

    3、字符串

    let [a, b, c] = "hello";
    let { length: len } = "hello"; // len为5

    4、数值和布尔

    let { toString: s } = 12; //s === Number.prototype.toString
    let { toString: s } = true; //s === Boolean.prototype.toString

    5、函数

    //函数参数的默认值是空对象,函数设置了对象解构赋值的默认值。
    function fn1({x = 0, y = 0} = {}) {
      return [x, y];
    }
    console.log(fn1({})); //[0, 0]
    
    //函数参数的默认值是有具体属性的对象,函数没有设置对象解构赋值的默认值。
    function fn2({x, y} = { x: 0, y: 0 }) {
      return [x, y];
    }
    console.log(fn2({})); //[undefined, undefined]
    console.log(fn2({x:2,y:5}));

    六、字符串的扩展
    1、一些函数

    'hello'.includes('l'); //true
    'hello'.startsWith('h'); //true
    'hello'.endsWith('o'); //true
    'hello'.repeat(3); //"hellohellohello"
    'hello'.padStart(8,'hi,'); //"hi,hello"
    'hello'.padEnd(11,',world'); //"hello,world"

    2、模板字符串

    let name = "camille";
    console.log(
      `hello,my name is ${name}`
    );
    
    let h = document.querySelector('body');
    h.innerHTML = `<h1 style="color:red">您好</h1>`;

    3、标签模板
    标签模板是函数调用的另一种形式,即模板字符串跟在函数名后面。这里的标签指的是函数,模板字符串就是函数的参数。

    //过滤HTML字符串,防止用户输入恶意内容。
    function SaferHTML(templateData) {
      let s = templateData[0];
      for (let i = 1; i < arguments.length; i++) {
        let arg = String(arguments[i]);
    
        s += arg.replace(/&/g, "&amp;")
                .replace(/</g, "&lt;")
                .replace(/>/g, "&gt;");
    
        s += templateData[i];
      }
      return s;
    }
    
    let sender = '<script>alert("abc")</script>'; // 恶意代码
    let message = SaferHTML`<p>${sender} has sent you a message.</p>`;
    
    console.log(message);

    七、函数的rest参数和数组的扩展操作符
    咋一看,都是3个点,函数的rest参数可以把参数序列转换为数组。数组的扩展操作符,...可以把数组转换为参数序列,[...]把具有iterator接口的对象转换为数组,[...]把字符串转换为数组。

    八、在html中写es6

    <script type="text/babel">
       // 你的ES6代码
    </script>
  • 相关阅读:
    软件设计项目进展18 2019/9/4
    软件设计项目进展17 2019/9/4
    软件设计项目进展16 2019/9/3
    将mcomaster配置以apache运行
    mcollective的web控制台---mcomaster搭建
    check_mk自定义监控增加性能数据图形展示
    check_mk自定义监控实践之powershell
    搭建puppet dashboard及遇到的问题
    通过MCollective实现puppet向windows的推送
    利用puppet管理配置IIS
  • 原文地址:https://www.cnblogs.com/camille666/p/es6.html
Copyright © 2011-2022 走看看