ES6语法新特性

122 阅读3分钟

1.新增关键字

  • var声明的变量可以跨作用域,let不行
  • let不能多次声明一个变量
  • var存在变量提升,let不存在变量提升
  • const生命的变量不允许修改
        {
            var a = 1;
            let b = 2;
            //let b = 3; let不能多次声明同一个变量,这样会报错
        }
        console.log(a);
        //console.log(b);
        //console.log(x);
        var x = 4;//undefined
        //console.log(y);
        let y = 5;//Uncaught ReferenceError: Cannot access 'y' before initialization
        const z = 6;
        //z = 7;
        console.log(z);//Assignment to constant variable.

2.解构表达式

  • 数组解构
  • 对象解构(对象解构后加上:后跟别名可以给变量起别名)
        let arr = [1,2,3];
        let [d,e,f] = arr;
        console.log(d,e,f)

        const person = {
            name : "zhangsan",
            age : 20,
            language : ["java","js","css"]
        }
        let {name:abbb,age,language} = person;
        console.log(name,age,language);

3.字符串扩展

  • 字符串模板,反引号(``)
  • 字符串插入变量和表达式,变量名写在{}中,{}可以放入javascript表达式
        let str = "hello es6";
        console.log(str.startsWith("hello"));
        console.log(str.endsWith("es6"));
        console.log(str.includes("e"));
        
        let ss = `<div>
                    <h1>hello world</h1>
                  </div>`;
        console.log(ss);
        
        let info = `我是${abbb},今年${age}`;
        console.log(info);

4.函数扩展

  • 函数参数默认值
  • 不定参数
  • 箭头函数
        function add(g,h=2) {
            return g + h;
        }
        console.log(add(1,3));
        
        function add2(...values) {
            console.log(values.length);
        }
        add2(1,2);
        add2(1,2,3);
        
        var print = function (obj) {
            console.log(obj);
        }
        //上下等价(单参数,单行代码)
        var print1 = obj => console.log(obj);
        
        var sum = function (i,j) {
            return i+j;
        }
        //上下等价(多参数,单行代码)
        var sum2 = (i,j) => i + j;
        
        //(多参数,多行代码)
        var sum3 = (i,j) => {
            k = i + j;
            return i + k;
        }
        
        //解构函数+箭头表达式
        const person1 = {
            name : "zhangsan",
            age : 20,
            language : ["java","js","css"]
        }
        
        function hello(obj) {
            console.log("hello,"+obj.name);
        }
        //箭头前的括号表示形参,括号内的{}表示解构表达式,解构出传入参数的name属性,并在箭头后打印
        var hello2 = ({name}) => console.log("hello,"+name);
        hello2(person1);

5.对象优化

  • 新增API
  • 声明对象简写
  • 对象函数属性简写
  • 对象扩展运算符
        const person = {
            name : "zhangsan",
            age : 20,
            language : ["java","js","css"]
        }

        console.log(Object.keys(person));//["name","age","language"]
        console.log(Object.values(person));//["zhangsan",1: 20,["java", "js", "css"]]
        console.log(Object.entries(person));//[["name", "zhangsan"],["age", 20],["language", Array(3)]]

        const a = { a : 1};
        const b = { b : 2};
        const c = { c : 3};

        console.log(Object.assign(a,b,c));//{a: 1, b: 2, c: 3}
        
        const age = 12;
        const name = "zhangsan";
        const person1 = {age,name};
        console.log(person1);//{age: 12, name: "zhangsan"}
        
        let person3 = {
            name : "jack",
            //以前
            eat: function (food) {
                console.log(this.name+"在吃"+food);
            },
            //箭头函数this不能使用,要使用(对象.属性名)的形式调用
            eat2: food => console.log(person3.name+"在吃"+food),
            eat3(food){
                console.log(this.name+"在吃"+food)
            }
        }
        
        let p1 = {name:"xxx",age:24};
        let someone = {...p1};//{name: "xxx", age: 24}
        console.log(someone);
        
        let p2 = {name:"xxx"};
        let p3 = {age:24};
        let p4 = {name:"yyy"};
        p4 = {...p2,...p3};//{name: "xxx", age: 24}
        console.log(p4);

6.数组新增了map和reduce方法

  • map 接收一个函数,将原数组中的所有元素用这个函数处理后放入新的数组
  • reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素
//map接收一个函数,将原数组中的所有元素用这个函数处理后放入新的数组
        let arr = [1,2,3];
        arr = arr.map((item) => {
            return item*2
        });
        //上下等价
        arr = arr.map(item => item*2);

        //reduce为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素
        //previousValue,上一次调用回调函数返回的值,或者是提供的初始值
        //currentValue,数组中当前被处理的元素
        //index,当前元素在数组中的索引
        //array,调用reduce的数组
        let result = arr.reduce((a,b)=>{
            console.log("上一次处理后:"+a);
            console.log("当前正在处理:"+b);
            return a + b;
        });
        console.log(result);

7.promise 封装异步操作,根据成功或者失败调用不同回调

        let p = new Promise((resolve,reject)=>{
            $.ajax({
                url : "",
                data : "data",
                success : function (data) {
                    resolve(data);
                },
                error : function (error) {
                    reject(error);
                }
            })
        })

8.模块化

主要是三个关键字:import export default