美文网首页
ES6基础学习

ES6基础学习

作者: Yytg | 来源:发表于2017-11-01 20:21 被阅读7次

    1.变量
    使用let声明变量,代替之前的var
    使用const关键字声明常量
    var可以重复声明变量,这本身感觉就有点瞎搞,因为在其他语言里这根本是不可能存在的,像Java...
    let出现之后解决了这个问题,不能重复声明,如果重复声明会报错
    Uncaught SyntaxError: Identifier 'a' has already been declared
    有了块级作用域:下面是最经典的例子:我们需要分别点击按钮1,2,3,弹出0,1,2,结果却弹出的都是3,为什么呢?因为ES6之前的作用域是函数级的作用域,所以外层循环先结束,此时的i已经变成了3。

    <body>
    <button>按钮1</button>
    <button>按钮2</button>
    <button>按钮3</button>
    </body>
    <script>
        var btn = document.querySelectorAll("button");
        for(var i=0;i<btn.length;i++){
            btn[i].onclick = function () {
                alert(i);
            }
        } // 分别弹出3
    </script>
    

    解决办法1:

        var btn = document.querySelectorAll("button");
        for(var i=0;i<btn.length;i++){
            (function(i){
                btn[i].onclick = function () {
                    alert(i);
                };
            })(i);
        }
    

    解决办法2,使用let代替var,代码如下:

    let btn = document.querySelectorAll("button");
       for(let i=0;i<btn.length;i++){
           btn[i].onclick = function () {
               alert(i);
           }
     }
    

    2.箭头函数
    箭头函数的出现其实就是为了方便

    let ary = [33, 7, 89, 45, 2, 15];
            ary.sort((a, b) => {
                return a - b;
            });
            alert(ary); // 2,7,15,33,45,89
    

    如果只有一个参数,()可以省
    如果只有一个return,{}也可以省
    修正了this的问题,相对好点

    let demo = a => a*2;
    alert(demo(2)); // 4
    

    3.参数扩展

    // 收集参数
    function fn(a,b,c,...args){
                alert(a);
                alert(b);
                alert(c);
                alert(...args);
            }
            fn(2,3,4,5,6,7);
            let arr = [3,45,6,67];
            // 默认参数
            function test(a,b=3,c=4){
                console.log(a,b,c);
            }
            test(1,2,5);
    

    4.数组方法
    1.map -----映射

      let arr = [89,54,75,47,99];
      let result = arr.map(function(item){
          return item*2;
      });
      alert(result); // 178,108,150,94,198
    

    2.reduce -----汇总 汇总:一堆对一个

    /*reduce ->汇总*/
    let arr = [67,56,89,54,90];
    let result = arr.reduce(function (temp,item,index) { //求平均数
        if(index!==arr.length-1){
             return temp+item;
          }
            return (temp+item)/arr.length;
      });
       console.log(result); // 71.2
    
    1. filter -----过滤器 过滤:一堆 ->剩下的
        /*filter过滤器*/
        let arr = [89,56,23,67,87,90,79];
        let result = arr.filter(item =>item%2==0);
        alert(result); // 56,90
    

    4.forEach 循环

        let arr = [90,45,6,76,23,567,65,78];
        arr.forEach(function (item,index) {
            alert(index+':'+item);
        })
    

    5.字符串
    startsWith/endsWith ----以什么开头,以什么结尾

       字符串模板写法:`${a}cde${f}`
        let url = 'git://www.baidu.com';
        if (url.startsWith('http')) {
            alert("http网址");
        } else if (url.startsWith('https')) {
            alert("加密网址");
        } else if (url.startsWith("git")) {
            alert("git网址");
        }
    

    5.Promise
    Promise----异步操作使用同步写法 因为异步操作的写法比较复杂

     function createPromise(url) {
            return new Promise(function (resolve, reject) {       //实例化Promise对象
                $.ajax({
                    url: url,
                    dataType: 'json',
                    success(data) {
                        resolve(data);
                    },
                    error(err) {
                        reject(err);
                    }
                });
            });
        }  Promise.all([createPromise('data/test1.txt'),createPromise('data/test2.txt')]).then(function (arr) {
            let [res,res1] = arr; // 解构赋值
            alert("全部成功了");
            console.log(res);
            console.log(res1);
        },function (err) {
            alert("至少有一个失败了");
        });
    

    6.generator:生成器
    写法:函数名前加 (星号),生成器的yield可以让函数在任意位置暂停运行

        function *show(num1,num2) {
            alert(`${num1},${num2}`);
            alert("a");
            let a = yield;
            alert(a);
            alert("b");
        }
        let obj = show(33,56); //obj是一个生成器对象
        obj.next(10);
        obj.next(6);       // 33,56,a,6,b
    

    7.解构赋值
    要求: 左右结构一样, 右边是个合法的东西,声明、赋值一次完成

    let arr = [12,45,66];
    let [a,b,c] = arr;
    console.log(a,b,c); // 12 45 66
    

    8.面向对象

        class User {
            constructor(name,pass){
                this.name = name;
                this.pass = pass;
            }
            showName(){
                alert(this.name);
            }
            showPass(){
                alert(this.pass);
            }
        }
        let u1 = new User("naruto",123456);
        u1.showName(); // naruto
        u1.showPass(); // 123456
    

    9.json

      JSON.stringify({a:12,b:5})  =>  '{"a":12,"b":5}'
      JSON.parse('{"a":12,"b":5}')=>  {a:12,b:5}
    

    相关文章

      网友评论

          本文标题:ES6基础学习

          本文链接:https://www.haomeiwen.com/subject/kgugpxtx.html