ES6特性之let、const、var的区别、解构赋值、Set

97 阅读2分钟

1.let和const命令

let、const、var的区别

var

变量有提升, 没有块级作用域, 可以重复声明

let

没有变量提升, 有块级作用域, 不能重复声明,

暂时性死区: 在代码块内,使用let命令声明变量之前,该变量都是不可用的 称为暂时性死区

const

没有变量提升, 声明常量,一旦定义,值不能再改变, 有块级作用域

2.解构赋值

数组解构

let [a,b,[aa,bb,cc]] = [1,2,['aaa','bbb','ccc']]
console.log(a,b) // 1,2

如果解构不成功,变量的值是undefined 解构赋值允许指定默认值

let [qq = true] = []
console.log(qq) //true

对象解构

const {
            name,
            age,
            colors:
            { col1, colnum }
        } = {
            name: 'zs',
            age: 18,
            colors:
                { col1: 'red', colnum: 10 }
        }
        console.log(name, age, col1, colnum);//zs 18 red 10
    // 对象的解构也可以指定默认值。
    var {x=1} = {}
    console.log(x); //1
    var {x,y = 5} = {x:1}
    console.log(x,y); //1,5
    // 构造函数解构
    function fn(obj) {
        console.log(obj);  //{name: 'aa', age: 20}
    }
    var obj = { name: 'aa', age: 20 }
    fn(obj)   

    // 字符串的解构赋值
    const [a,b,c,d,e] = 'hello'
    console.log(a,b,c,d,e); //h e l l o

3.Set

ES6提供了新的数据解构Set。类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成Set数据结构

添加

`

  var myset = new Set()
  // 添加成员
  myset.add(1)
  myset.add(2)
  myset.add(2)
  // 长度 没有重复的值
  console.log(myset.size)  //2

` 删除

     // 删除某个值,返回一个布尔值,表示删除是否成功。
      myset.delete(1) //删除
      var a = new Set()
      a.add(100)
      a.add(200)
      console.log(a.delete(200));  //true 

查找

      // 判断是否有这个成员
      // 返回一个布尔值,表示该值是否为Set的成员。
      console.log(myset.has(1))  //false
      var ee = a.has(300)
      console.log(ee);  //false

清除

      // clear()  清除所有成员,没有返回值
      var tt = a.clear()
      console.log(tt);  //undefined

Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化

去重

      // 去重
      var s = new Set([1, 2, 3, 4, 5, 4, 4])
      console.log([...s])  //[1,2,3,4,5]
      
      //去除字符串里面的重复字符。
      console.log([...new Set('ababbc')].join(''))  //abc
      
      var str = 'ababcabcabcde'
      var kk = [...new Set(str)].join('')
      console.log(kk);  //abcde

遍历


      var ss = new Set(['aaa', 'bbb', 'ccc', 'ddd'])
      // 返回键名的遍历器
      for (let key of ss.keys()) {
        console.log(key)
      }
      // 返回键值的遍历器
      for (let key of ss.values()) {
        console.log(key)
      }
      // 返回键值对的遍历器
      for (let key of ss.entries()) {
        console.log(key) // ['aaa', 'aaa']
      }
      // 使用回调函数遍历每个成员
      ss.forEach((key, value) => {
        console.log(key, value)
      })