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 是一个拥有
- 为什么用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可以做并发