ES6(3)

169 阅读2分钟

1. symbol

    let xxx = Symbol();
    let obj = {
      name: 'zs',
      age: 18,
      [xxx]: '183cm',
      [Symbol('x1')]: '18级'
    } 
    obj[Symbol('x2')] = 'abc'
  1. 是独一无二的基本数据类型
  2. 可在Symbol()括号内部添加字符,区别不同的Symbol()
  3. 在循环中,symbol类型的属性无法拿到
    for(key in obj) {
    console.log(key)
    // console.log(obj[key])
    }

2. Set

let tmp = new Set();
Set 可去除数组中的重复项
let s1 = new Set(a1); 类数组

let a1 = [2,1,3,2,4,5,1,4];  
console.log(s1); // 2 1 3 4 5
  1. add()添加数据(不能添加重复数据)
  2. delete() 删除数据 => boolean
  3. has() 判断是否含有某个数据 => boolean
  4. clear() 清空
  5. .size长度

3. Map

let tmp = new Map();
键值对形式

  1. set() 设置数据
  2. get() 获取数据
  3. has() 判断是否含有某个数据 => boolean
  4. delete() 删除数据 => boolean
  5. clear() 清空
  6. .size长度

4. Promise(异步编程的解决方案)

resolve 成功的回调函      reject 失败的回调函数
p1.then(f1).catch(f2):

let p1 = new Promise(function(resolve, reject) {
      
      console.log('开始发送请求1');
      setTimeout(() => {
        let tag = true
        if(tag) {
          let obj = {
            name: 'zs',
            age: 18
          }
          resolve(obj)
        } else {
          reject()
        }

      }, 1500)

    }).then(function(obj) {
      console.log(obj)
      console.log('请求1成功')

    }).catch(function() {

      console.log('请求1失败')

    })

p1.then(f1,f2):

    let p2 = new Promise((resolve, reject) => {

      console.log('开始发送请求1')

      setTimeout(() => {
        let tag = false;

        if(tag) {
          resolve()
        } else {
          reject()
        }

      }, 2000)

    }).then(function(){

      console.log('请求1成功')

    }, function() {

      console.log('请求1失败')

    })

p1.then(return p2).then().catch()<------(p1.then(return p2) => p2)

 let p1 = new Promise((resolve, reject) => {

      console.log('开始发送请求1')
      setTimeout(() => {
        let tag = false
        if (tag) {
          resolve()
        } else {
          reject()
        }
      }, 1000)

    }).then(() =>{
      
      console.log('请求1成功')
      
      return new Promise((resolve, reject) => {
        console.log('开始发送请求2')

        setTimeout(() => {

          let tmp = false 

          if (tmp) {
            resolve()
          } else {
            reject()
          }

        }, 2000)
      })


    }, () => {          <-----此时若想设置“请求1失败”只能在then中添加第二个函数

      console.log('请求1失败')
      // return Promise.reject()
      return new Promise(()=>{})

    }).then(() => {
      console.log('请求2成功')
    }).catch(() => {
      console.log('请求2失败')
    })
  1. Promise.all<--------所有Promise执行完成
Promise.all([p1, p2, p3]).then(() => {  
       console.log('okokok')  
     })
  1. Promise.race([p1,p2,p3])<---------只需有一个执行完成
Promise.race([p1,p2,p3]).then(() => {
      console.log('1111')
    })