ES6新特性总结

ECMAScript6 又叫ES2015,简称ES6

一. let和const

  • let
    • let定义变量不可以再次定义,可以从新赋值
    • 具有块级作用域
    • 没有变量提升,必须先定义在使用
    • let声明的变量不能被window调用,是独立的
  • const
    • const定义常量,是不可变的,一旦定义,不能修改其值
    • 初始化常量时,必须给初始值
    • 具有块级作用域
    • 没有变量提升,必须先定义在使用
    • const声明的常量也是独立的,不能被window调用
关键字变量提升块级作用域初始值更改值通过window调用
varx-YesYes
letx-YesNo
constxYesNoNo

二. 解构赋值

  • 数组的解构
    • 从数组中提取值,对变量进行赋值,方便获取数组中的某些项
    // 1.变量和值一一对应
    let arr = [1, 2, 3];
    let [a, b, c] = arr;
    console.log(a,b,c);   // 1 2 3
    复制代码
    // 2. 变量多,值少
    let arr = [1, 5, 8];
    let [a, b, c, d] = arr;
    console.log(a, b, c, d); // 1 5 8 undefined
    复制代码
    // 3. 变量少,值多
    let arr = [5, 9, 10, 8, 3, 2];
    let [a, b] = arr;
    console.log(a, b);  // 5, 9
    复制代码
    // 4.按需取值
    let arr = [5, 9, 10, 8, 3, 2];
    let [, , a, , b] = arr; // 不需要用变量接收的值,用空位占位
    console.log(a, b); // 10, 3 
    复制代码
    // 5.剩余值
    let arr = [5, 9, 10, 8, 3, 2];
    let [a, b, ...c] = arr; // ...c 接收剩余的其他值,得到的c是一个数组
    console.log(a, b, c); 
    // 结果:
    // a = 5, 
    // b = 9, 
    // c = [10, 8, 3, 2]
    复制代码
    // 6.复杂的情况,只要符合模式.即可解构
    let arr = ['zhangsan', 18, ['175cm', '65kg']];
    let [, , [a, b]] = arr;
    console.log(a, b); // 175cm 65kg
    复制代码
  • 对象的解构
    • 从对象中提取值,对变量进行赋值,方便解析对象中的某些属性的值
    // 1. 变量名和属性名一样
    let { foo, bar } = {foo: 'aaa', bar: 'bbb'};
    console.log(foo, bar); // aaa, bbb
    
    let {a, c} = {a: 'hello', b: 'world'};
    console.log(a, c); // hello, undefined
    复制代码
    // 2. 通过 :来更改变量名
    let {a, b:c} = {a: 'hello', b: 'world'};
    console.log(a, c); // hello, world
    复制代码
    // 3. 变量名和属性名一致即可获取到值,不需要一一对应
    let {b} = {a: 'hello', b: 'world'};
    console.log(b); // world
    复制代码
    // 4. 剩余值
    let obj = {name:'橘右京', age:20, gender:'男'};
    let {name, ...a} = obj;
    console.log(name, a);  // name = zs   a = {age: 20, gender: "男"};
    复制代码
    // 5. 复杂情况,只要符合模式,即可解构
    let obj = {
    name: '不知火舞',
    age: 22,
    dog: {
        name: '娜可露露',
        age: 13
        }
    };
    let {dog: {name, age}} = obj;
    console.log(name, age); // 娜可露露 13
    复制代码
  • 实际开发应用中
    // 假设服务器上的获取的数据如下
    let res = {
        data: ['a', 'b', 'c'],
        meta: {
            code: 200,
            msg: '获取数据成功'
        }
    }
    // 如何获取到 code 和 msg
    let { meta: { code, msg } } = res;
    console.log(code, msg); // 200, 获取数据成功
    复制代码

三. 函数

  • 箭头函数的特点:
    • 箭头函数内部的this指向外部作用域中的this,箭头函数没有自己的this
    • 箭头函数中内部没有arguments
    • 箭头函数不能作为构造函数
  • 函数参数的默认值
    // ES5 中给参数设置默认值的变通做法
    function fn(x, y) {
        y = y || 'world';
        console.log(x, y);
    }
    fn(1)
    // ES6 中给函数设置默认值
    function fn(x, y = 'world') {
        console.log(x, y);
    }
    fn(2)
    fn(2,3)
    复制代码
  • rest参数
    • 剩余参数,以...修饰最后一个参数,把多余的参数放到一个数组中
    // 参数很多,不确定多少个,可以使用剩余参数
    function fn(...values) {
        console.log(values); // [6, 1, 100, 9, 10]
    }
    // 调用
    console.log(fn(6, 1, 100, 9, 10));
    复制代码

    rest参数只能是最后一个参数

四. 内置对象的扩展

  • Array的扩展
    • 扩展运算符(...可以把数组中的每一项展开)
    // 合并两个数组
    let arr1 = [1, 2];
    let arr2 = [3, 4];
    let arr3 = [...arr1, ...arr2];
    console.log(arr3); // [1, 2, 3, 4]
    复制代码
    • Array.from()
      • 把伪数组转换成数组
      • 伪数组必须有length属性,没有length得到一个空数组
      • 转换后的数组长度根据伪数组的length决定的
      let fakeArr = {
          0: 'a',
          1: 'b',
          2: 'c',
          length: 3
      };
      let arr = Array.from(fakeArr);
      console.log(arr); // ['a', 'b', 'c']
      复制代码
    • 数组实例find() findIndex():
      • find和findIndex方法,会遍历传递进来的数组
      • 回调函数有三个参数,分别表示数组的值,索引及整个数组
      • 回调函数中return的是一个条件,find和findIndex方法的返回值就是满足这个条件的第一个元素或索引
      • find 找到数组中第一个满足条件的成员并返回该成员,如果找不到返回undefined
      • findIndex 找到数组中第一个满足条件的成员并返回该成员的索引,如果找不到返回 -1
    • 数组实例includes()
      • 判断数组是否包含某个值,返回true/false
      • 参数1为查找的内容
      • 参数2表示开始查找的位置
  • String的扩展
    • 模板字符串
      • 使用反引号``
      • 变量在模板字符串中使用${name}来表示
    • includes(str, [position]) 返回布尔值,是否找到参数字符串
    • startsWidth(str, [position]) 返回布尔值,表示参数字符串是否在原字符串的头部或指定位置
    • endsWith(str, [position]) 表示参数字符串是否在原字符串的尾部或指定位置
    • repeat() 返回一个新字符串,表示将原字符串重复n次
  • Set
    • ES6中新增的内置对象.类似于数组,但成员的值都是唯一的没有重复的值(可以用来去重): 方式一:[...new Set(arr)] 方式二: Array.from(new Set(arr))

五. class类

class之间可以通过extends关键字实现继承,

  • class和传统构造函数有什么区别
    • 在语法上更加贴合面向对象的写法
    • class实现继承更加易读,易理解

六. Promise

  • Promise解决了回调地狱的问题,回调地狱指一个函数中有太多的异步操作,会产生大量的嵌套,难以阅读和维护.

  • Promise会让代码变得更容易维护,像写同步代码一样,业务逻辑性更易懂

七. 数组foreach和map的区别?

  • foreach直接修改原数组,map是修改之后返回一个新修改过的数组,原数组不变.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值