美文网首页
16-JavaScript-ES6语法

16-JavaScript-ES6语法

作者: 喝酸奶要舔盖__ | 来源:发表于2018-12-03 14:37 被阅读0次

    ES6常量和变量关键字

    • ES6定义变量
    let num;
    let num = 666;
    

    注意点:
    ES6开始新增了一种作用域, 叫做代码块
    通过let定义的变量受到代码块的限制, 只能在所属的作用域中使用
    使用var定义变量会预解析,但是let定义变量不会预解析

    //ES6代码块
        {
            const num = 888;
        }
    
        console.log(num);//报错,访问不到代码块内部变量
    
    • 定义常量
    const num = xxx;
    

    注意点:
    1.常量不能修改
    2.常量必须在定义的同时初始化
    3.常量的指向不能改变, 但是指向内存中保存的数据可以改变

        const arr = [1,3];
        // arr = [2,4]; //数组的指向不能改变
        arr[0] = 666; //数组内部元素可以更改
        arr.push(777);
    

    ES6字符串模板

    • ES6中新增一种字符串模板的方法
        需求: 要求从服务器获取到数据之后, 根据数据渲染界面
    
        //ES6之前需要做字符串拼接
        var obj = {
            name: "lnj",
            age: 13,
            gender: "male",
            say: function () {
                return "hello world";
            }
        };
        //之前需要进行字符串拼接
        var str  = "<li>"+obj.name+"</li><li>"+obj.age+"</li><li>"+obj.gender+"</li>";
    
        //ES6之后不需要字符串拼接,使用字符串模板
        var str = `
            <li>${obj.name}</li>
            <li>${obj.age}</li>
            <li>${obj.say()}</li>
        `;
        var oUl = document.querySelector("ul");
        oUl.innerHTML = str;
    

    字符串新增方法

    • includes()方法
      includes()判断是否包含指定的字符串,存在返回true
        var str = "http://www.it666.com/images/lnj.mp4";
        //includes()判断是否包含指定的字符串,存在返回true
        //存在兼容性问题
        let res = str.includes("it");
        console.log(res);
    
    • startsWith()方法
      判断字符串是否以指定字符串开头
    • endsWith()方法
      判断字符串是否以指定字符串结尾
        var res1 = str.startsWith("http://");
        console.log(res1);
        var res2 = str.endsWith(".mp4");
        console.log(res2);
    

    ES6解构语法

    解构数组
    • 数组解构方法
         var arr = [1, 3, 5];
        // 解构数组会依次将数组中的内容赋值给等号左边[]中的变量
        let [a, b, c] = arr;
        console.log(a,b,c);
    

    注意点:
    如果等号右边的数组和等号左边的内容不对等, 那么没有的就是undefined

    let [a,b,c] = [1,3];
    console.log(a, b, c);
    
    • 在ES6解构数组的时候, 可以指定默认值
        //在指定默认值后,解构时候不重新赋值,就是默认值
        let [num1 = 777,num2,num3] = [,2,3];
        console.log(num1);//777
        console.log(num2);//2
        console.log(num3);//3
    
    解构对象
        let obj = {
            name: "lnj",
            age: 13
        };
    
        // 会将对象中和属性名称和解构中变量名称一致的赋值给解构的变量
        //找不到对应的变量名称就不打印
        let {name,age} = obj;
        console.log(name, age);
    
        //解构的同时也可以指定默认值
        let {name,age, score = 58} = obj;
        console.log(name,age,score);
    
    • 解构对象应用
      • 利用解构对象传参
        let obj = {
            name: "lnj",
            age: 13
        };
        //利用解构对象传参
        function say({name,age}) {
            console.log(name, age);
        }
        say(obj);
      

    ES6函数默认参数

    • ES6开始函数的参数可以直接指定默认值
    function say(name = "wjh",age = -1) {
            console.log(name, age);
    }
    say();
    
    • 应用场景:
      某一个函数的某些参数永远都是一些固定的值,
      获取用于都是通过其它函数获得的, 那么就可以使用默认参数
        function Car(id) {
            this.id = id;
        }
        function createCar(id = getRandom()) {
            return new Car(id);
        }
        function getRandom() {
            return Math.random() * 10000;
        }
    

    ES6可变参数

    • 可变参数必须在参数列表的最后
       function sum(...ags) {
            var sum = 0;
            for (let i = 0, len = ags.length; i < len; i++){
                sum += ags[i];
            }
    
            //可变参数本质就是一个数组保存传入的参数
            console.log(ags);
    
            return sum;
        }
    
        var res = sum(1,2,3,4);
        console.log(res);
    
    • 会将数组中的元素逐个取出来赋值给形参
    //需求: 把数组中的元素逐个传入到函数中
        function sum(a, b, c, d) {
            return a + b + c + d;
        }
        var arr = [1 , 2, 3, 4];
    
        // 可变参数会将数组中的元素逐个取出来赋值给形参
        let res = sum(...arr);
        console.log(res);
    
    • 可变参数可以实现数组拼接
        var arr1 = [1, 3, 5];
        var arr2 = [2, 4, 6];
    
        var res = [...arr1,...arr2];
        console.log(res);
    

    ES6箭头函数

    • 箭头函数的格式
      let 函数名称 = (形参列表) => {函数体}
    • 箭头函数作用:
      简化代码
      修改函数中的this指向

    注意点:
    如果函数体中只有一句代码, 那么{}可以省略
    如果函数形参列表中只有一个形参, 那么()可以省略
    如果函数体中只有一句代码, 并且是返回值, 那么return可以省略

        //如果函数体中只有一句代码, 那么{}可以省略
        let say = () => console.log("haha");
        say();
    
        // 如果函数形参列表中只有一个形参, 那么()可以省略
        let say = name => {
            console.log(name);
        };
    
        say("jiajia");
    
        //如果函数体中只有一句代码, 并且是返回值, 那么return可以省略
        let sum = (a,b) => {
            return a + b;
        };
    
        let sum = (a,b) => a + b;
        var res= sum(110,20);
        console.log(res);
    
    • 利用箭头函数解决this指向问题
        /*
        1.由于Person构造函数也是一个函数, 所以也会开启一个作用域
        2.由于箭头函数是在Person构造函数的作用域中定义的, 所以数据Person构造函数作用域
        3.箭头函数也是一个函数, 所以也会开启一个作用域
        4.在箭头函数中使用this时, 会从所在的作用域链的上一层继承this
    
        应用场景:
        1. 让setTimeout/setInterval中的this变为我们想要的this
         */
    
        function Student() {
    
            setInterval(() => {
                // 2. ES6的箭头函数中, 没有this这个概念
                // 它会从所在的作用域链的上一层继承this
                console.log(this);
            },1000);
    
        }
    
        var stu = new Student();
    
        // 注意点:
        // 箭头函数中不能使用arguments
        let test = () => {
            console.log(arguments);
        };
        test(1, 3, 5);
    

    ES6增加对象字面量

    • 在ES6中,如果对象中的key和value相同,可以省略,只写一个变量名称
    function createPerson(name, age) {
            var obj = {
                // name: name,
                // age: age,
                // say: function () {
                //     console.log(this.name, this.age);
                // }
                name,
                age,
                //函数可以省略function
                say() {
                    console.log(this.name, this.age);
                }
            };
            return obj;
        }
        var p = createPerson("zq", 34);
        console.log(p);
        p.say();
    

    ES6中的类

    • ES6开始提供了一个关键字, 专门用于定义类 class
    // 代表定义一个名称叫做Person的类, 将来可以通过这个类创建对象
    
        //定义一个Person类
        class Person{
            // 构造函数, 创建对象时系统会默认执行
            constructor(name,age) {
                this.name = name;
                this.age = age;
            }
            // 在类中定义的对象方法
            say(){
                console.log(this.name, this.age);
            }
    
            // 在类中定义静态方法
            static eat(){
                console.log("在吃东西");
            }
        }
    
    //通过类创建对象
        let p = new Person("zq",77);
        p.say();
        Person.eat();
    

    ES6对象继承

    • ES6中新增的继承方法
      1.在子类后面添加extends 类名
      2.利用super将父类的属性传递给子类
        //定义父类
        class Person{
            constructor(name,age){
                this.name = name;
                this.age = age;
            }
            say(){
                console.log(this.name, this.age);
            }
        }
    
        // 定义子类
        // 在子类后面添加extends 父类名
        class Student extends Person{
            constructor(name,age,score){
                //利用super将父类的属性传递给子类
                super(name,age);
                this.score = score;
            }
    
            eat(){
                console.log("正在吃东西");
            }
            // 在ES6中, 可以重写父类的方法
            say(){
                console.log(this.name, this.age, this.score);
            }
        }
    
        //创建子类对象
        let stu = new Student("wjh",19,23.4);
        stu.eat();
        stu.say();
    

    相关文章

      网友评论

          本文标题:16-JavaScript-ES6语法

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