es6与js的关系:前者是后者的规格,后者是前者的一种实现
babel转码器:babel转码器是一个使用广泛的转码器,可以将 ES6 代码转为 ES5 代码,从而在老版本的浏览器执行。这意味着,你可以用 ES6 的方式编写程序,又不用担心现有环境是否支持。
安装:$ npm install --save-dev @babel/core
配置文件.babelrc: 存放在项目的根目录下,用来设置转码规则和插件,基本格式如下:
{
"presets": [{"@babel/env"}],
"plugins": []
}
presets:设定转码规则,$ npm install --save-dev @babel/preset-env;可设置多个转码规则
let命令:
let声明的变量只在它所在的代码块有效;
在for循环中,每一次循环let声明的变量都是一个新的变量;
for循环中,循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。
let不存在变量提升
形成暂时性死区:在代码块内,使用let命令声明变量之前,该变量都是不可用的
同一个代码块内,不允许重复声明let变量
Promise
Promise 构造函数只有一个参数,是一个函数,这个函数在构造之后会直接被异步运行,所以我们称之为起始函数。起始函数包含两个参数 resolve 和 reject。
Promise 类有 .then() .catch() 和 .finally() 三个方法,这三个方法的参数都是一个函数,.then() 可以将参数中的函数添加到当前 Promise 的正常执行序列,.catch() 则是设定 Promise 的异常处理序列,.finally() 是在 Promise 执行的最后一定会执行的序列。 .then() 传入的函数会按顺序依次执行,有任何异常都会直接跳到 catch 序列
Promise函数写法如下:
new Promise(function (resolve, reject) {
var a = 0;
var b = 1;
if (b == 0) reject("Diveide zero");
else resolve(a / b);
}).then(function (value) {
console.log("a / b = " + value);
}).catch(function (err) {
console.log(err);
}).finally(function () {
console.log("End");
});
使用场景: 当需要多次顺序执行异步操作的时候,例如,如果想通过异步方法先后检测用户名和密码,需要先异步检测用户名,然后再异步检测密码的情况下就很适合 Promise。
async
async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。
// 例如:
async function helloAsync(){
return "helloAsync";
}
console.log(helloAsync()) // Promise {<resolved>: "helloAsync"}
helloAsync().then(v=>{
console.log(v); // helloAsync
}
await 关键字仅在 async function 中有效。如果在 async function 函数体外使用 await ,只会得到一个语法错误
await 操作符用于等待一个 Promise 对象, 它只能在异步函数 async function 内部使用
深拷贝数组的方法
1.const newArr = JSON.parse(JSON.stringify(arr))
2.const newArr = arr.concat()
3.const newArr = arr.slice(0)
4.const newArr = [...arr]