关于ES6的部分新特性

53 阅读3分钟

let与const

  • ES6新增的两种变量声明的方式
  • ES5中只能使用var来声明

let/const与var的差异

1.let/const声明的变量不允许出现重复的

  • 使用var声明的变量出现重复时,后一个值会覆盖前一个值;
  • let/const不允许出现重复变量;

2.let/const声明的变量没有变量提升

  • var声明的变量当出现变量提升时,值为undefined;
  • let/const不允许,会报错;

3.let/const声明的变量,会受限于所有的{}

  • 使用var声明的变量只会受限于函数内部,即为在函数中循环中也可以调用;
  • 使用let/const声明的变量是块级作用域;

==关于let和const的补充:==

  • let声明的变量后续可以修改内部的值,而const则不行,因为const一般用来声明==常量==;
  • 因为let声明的变量可以修改,故第一次声明时可以不赋值;但是const因为不能修改,所以首次必须赋值,且一般用作数组或对象的声明;

箭头函数

  • 可以看作是对ES5普通函数的写法上的一个优化

写法:普通写法: (书写形参)=>{书写函数调用时执行的代码}

箭头函数的优化

1.箭头函数如果只有一个形参的时候,可以不写小括号(除此之外,必写)

2.如果箭头函数的函数体只有一行代码,那么可以省略大括号(并且默认将这行代码return)

箭头函数与普通函数的区别

  • 1.箭头函数内部没有this,所以他的this取决于书写的时候;
  • 2.箭头函数内部没有arguments;

解构赋值

快速从数组或对象中取出成员的一种语法

解构数组

ES5拿到数组所有成员的方法

    var num1 = arr[0]
    var num2 = arr[1]
    var num3 = arr[2]
    console.log(num1, num2, num3)

ES6数组解构赋值

       let [num1, num2, num3] = arr
       console.log(num1, num2, num3)

ES5拿到对象所有成员的方法

        var obj1 = obj.a
        var obj2 = obj.b
        var obj3 = obj.c
        console.log(obj1, obj2, obj3)

ES6对象解构赋值

        let { a, b, c } = obj
        console.log(a, b, c)
        

Set与Map

ES6新推出的两种数据

Set

类似于数组的一种数据结构,内部按照索引排序(但是不能通过索引取值),天生不支持重复数据

语法:let s=new Set([数据1,数据2,数据3])

方法:

  • 1.size:

    作用:获取到当前数据结构中的数据的数量

    console.log(s.size)

  • 2.add:

    作用:向当前数据新增数据结构中新增数据

    console.log('add 后的数据结构', s)

  • 3.has:

    作用:查询当前数据结构中是否拥有该数据结构;找到的时候返回true,否则返回false

    console.log(s.has(100)

  • 4.delete:

    作用:删除当前数据结构中指定数据

    s.delete(5)

  • 5.clear:

    作用:清空当前数据结构

    console.log('清空后的数据结构 ', s)

  • 6.forEach

        s.forEach(function (item, key, origin) {
         // set 数据结构是没有 key 所以 item 和 key 打印出来的值都一样
         console.log(item, key, origin)
     })
   

Map

和Set一样,也不支持重复数据,类似于对象的一种数据结构,但不同之处在于,map的key可以是任意值。

语法:var m=new Map([key,value])

方法:

  • 1.set()

    作用:向当前数据结构中新增数据

    m.set('newKey', [1, 2, 3, 4, 5])

  • 2.get()

    作用:获取到指定key对应的value值

    console.log(m.get('newKey'))

  • 3.forEach:

    m.forEach(function (item, key, origin) {
           /**
            *  item: 对应的 value
            *  key: 对应的 key
            *  origin: 对应的原始数据结构
           */
           console.log(item, key, origin)
       })