Web前端

ES6的变化需要知道的点

2019-11-04  本文已影响0人  追逐_chase
web.jpeg

1. 定义变量 和 常量

需要注意的是:

  1. 不能重复声明变量
  2. 不会预处理, 不存在变量提升
    3.用let声明的变量 如果在块内,会生成 块作用域
  let name = "cc";
    console.log(name);
    let name = "TT";  //重复声明name 报错

   console.log(age);  //报错 没有初始化 变量 age
   let age = 18;
 let btns = document.querySelectorAll("button");

    // 在块作用域内有效
    for (let i = 0; i < btns.length; i++) {
        let btn = btns[I];
        btn.onclick = function () {
            alert(i);
        }
    }

比较ES5

 for (var i = 0; i < btns.length; i++) {
        var btn = btns[I];
        //提示全部是 3
        btn.onclick = function () {
            alert(i);
        }
    }

const 声明常量,一旦声明之后,该常量不可修改
 //const声明常量
   //声明之后的常量 不可以更改
    const KEY = "19";
    KEY = "18";

2.模板字符串

ES5 字符串拼接

  let obj = {userName:"cc",psd:"123"};
    //之前的字符串拼接
    let str = "我是:" + obj.userName + "密码是:" + obj.psd;

    console.log(str);

ES6 模板字符串 拼接

 //es6模板字符串 拼接

    let psd = `这是一个模板字符串拼接 ${obj.userName},密码是:${obj.psd}`;

    console.log(psd);

    //使用的场景
    //比如:网址字符串的的请求

    let url = `http://ezcarry.com?userName=${obj.userName}&psd=${obj.psd}`;

    console.log(url);

3.解构赋值

3.1数组解构赋值 有以下方面
 let [a, b, c] = [1, 3, 5];
   console.log(a,b,c);
// 结果 a=1.b=3,c=5

理解: 声明了变量a,b,c 与对应数组的 所以赋值

 let [a, b, c] = [1, 3, [2, 4]];
    //其中c = [2,4]
    console.log(a,b,c);
 let [a, b] = [1, 3, 5];
   console.log(a,b);  // 1,3
  let [a, b, c] = [1];
    console.log(a,b,c);
// a =1 , b,c  undefined ,undefined

如果2边不一样,还可以给定默认值

let [a, b = 666, c = 888] = [1];
console.log(a,b,c);

b,c给定的默认值,其实里面有判断处理,如果对应索引有值,则赋值,如果没有 使用默认值

// 如果使用了扩展符,索引以后的数据打包, b = [3,5]
    let [a, ...b] = [1, 3, 5];
    console.log(a,b);

3.2对象解构赋值

 //let声明的 变量名 和 对象中的属性值 要相同,
 let {name,age} = {name:"cc",age:18};

    console.log(name,age);
    let {name} = {name:"cc",age:18};

    console.log(name);

4.扩展运算符/3点运算符

 let [a, ...b] = [1, 3, 5]; 
 // 对应a = 1; b = [3, 5];
 let arr1 = [1, 3, 5];
 let arr2 = [2, 4, 6];
  let arr = [...arr1, ...arr2]; 
// 对应的结果 let arr = [1, 3, 5, 2, 4, 6];

5.函数(这里主要是 箭头函数 和 函数的参数)

函数表达式
let test = function(){};

 let test = function () {

        console.log("测试");
    }
// ()里传入形参
let test = ()=> {

        console.log("测试");
    }
 function test(...value) {

        console.log(value);
 }

//value 是一个真实的数组,具备数组的所有属性和方法
 test(1,2,3,4,5);
image.png

比对ES5

 function test() {
    //arguments 伪数组  只可以 for遍历
        console.log(arguments);
 }

 test(1,2,3,4,5);
image.png

5. ES6中的类和对象

 class Student{
        // 通过new创建的对象的时候,会自动调用constructor
        constructor(name,age){
            //属性
            this.name = name;
            this.age = age;
        }
        //实例方法
        say = function () {
            console.log(`你好,我是:${this.name},今年${this.age}`);
        }

        //static 使用在 es6中 规定是 只可以定义静态方法,不可以定义静态属性,有的浏览器不支持
        //静态属性  要用 static 声明
        // static score = 66;
        // 定义静态属性

        //静态方法
        static run = function () {
            console.log("走呀,一块跑步")
        }
        // 注意 静态方法可以简写
        // static eat = function () {}
        static eat(){
            console.log("吃饭");
        }
    }

    //定义静态属性
    Student.score = 66;


    let s = new Student("cc",18);
    s.say();

5.1 ES6中通过class声明定义的类原型对象


    // 定义一个Person类

    class Person {
        // constructor 相当于es5 创建的 自定义构造函数
        constructor(name,age){
            this.name = name;
            this.age = age;

            this.hi = function () {
                console.log("HHHHHHH");
            }
        }

        //这个方法就像相当于 es5中创建对象中的 原型方法
        say = function () {
            console.log("你好")
        }
    }

    let p = new Person("cc",18);

    console.log(p);
    //给这个类 动态的添加原型属性 和方法
    Person.prototype.num = 90;
    Person.prototype.run = function () {
        
    }

下面的 这个方式是不可以的

 //这个方式是不可以的
    // 在es6中自定义对象添加原型对象是不可以的

  
    Person.prototype = {
        constructor: Person,
        type: "人",
        say: function () {
            console.log(this.name, this.age);
        }
    }


5.2 ES6类的继承

声明一个 父类 Person

 class Person {
        constructor(name,age){
            this.name = name;
            this.age = age;
        }
        say(){
            console.log("你好",this.name,this.age);
        }
    }

Student继承Person

 // 告诉浏览器将来Student这个类需要继承于Person这个类
 class Student extends Person {
        constructor(name,age,score){
            // Person.call(this, name, age);
            //调用父类 类似借用函数
            super(name,age);

            this.score = score;
        }

        sudey(){
            console.log("好好学习",this.name,this.age,this.score);
        }
    }

 let s = new Student("cc",18,99);
//调用 父类的方法
    s.say();

    console.log(s);
上一篇下一篇

猜你喜欢

热点阅读