ES6新内容

107 阅读2分钟

1. var、let、const区别

  • Var 声明的是全局变量,在预编译阶段存在声明提升
    不推荐:
    • 全局变量是万恶之源(不会被垃圾回收机制回收)
    • 变量覆盖
    • 没有块级别作用域
  • let 声明的是变量、值可以修改、有块级作用域
  • const 声明的是不可变的常量、必须赋值、常量名建议大写
  • const 声明的常量到底能不能改?
    • 基本数据类型不能改,如int string
    • 数组或对象里面的值可以更改,const只能保证指针不变
    • 要做到数组对象也不能改,需要用到对象冻结+深度冻结(递归)

2. 解构赋值

  • 赋值
    let [a,b,c] = [1,2,3]; 
    console.log(a,b,c); //1,2,3
    
  • 交换数据
    let a = 10,b = 5; 
    [a,b] = [b,a]; 
    console.log(a,b); //5、10
    
  • 数组快速去重
    let arr = [3,6,9,3,7]; 
    let newArr = [...new Set(arr)]; 
    console.log(newArr); //[3,6,7,9]
    

3. 模版字符串

```
let num = 1;
let arr = `a${num}b`;
console.log(arr); //a1b  

4. Promise

  • 什么叫Promise?
    • Promise 是一个拥有 then 方法的对象或函数
  • 为什么用Promise
    • 解决异步问题, 解决回掉地狱,.then()可以获取到最新的状态
  • Promise的使用
     // new Promise()返回一个promise对象,该对象共有三种状态:
     // 等待态、完成态=resolve(res)=>.then(res)和拒绝态=reject(err)=>.catch(err)
     // 回调函数的调用是根据对象的状态来完成的;该对象的原型上拥有then和catch等方法
     // 下面声明的构造函数会立即执行
     const promise = new Promise((resolve, reject) => {
         //做一些异步操作
         console.log(1);
         resolve(); // resolve()已完成,reject() 失败
         console.log(2);
     })
     // .then()异步执行 
     promise.then(() => {
         console.log(3);
     }).catch(()=>{
         //接收reject的回调和.then()的报错
     })
     console.log(4);
     // 1243
    
    
  • Promise 解决过程 是一个抽象的操作,其需输入一个 promise 和一个值,我们表示为 [[Resolve]](promise, x),如果 x 有then 方法且看上去像一个 Promise ,解决程序即尝试使 promise 接受 x 的状态;否则其用 x 的值来执行 promise 。(x有三个可能的值,1、与promise相等拒绝执行,2、为Promise 3、对象或函数)

5. ...扩展运算符

```
let arr1 = ["aaa", "bbb", "ccc"];
console.log(...arr1)  // aaa bbb ccc 展开数组
let arr2 = [1,2,...arr1];
console.log(arr2)  // [1, 2, 'aaa', 'bbb', 'ccc'] 合并数组

6. ...箭头函数

let fun = () => {}

7. Async与await

- async 能否代替Promise => 不能
async一行一行执行,有线程休眠的功能
Promise可以做并发