es7新特性
Array.prototype.includes
Includes方法用来检测数组中是否包含某个元素,返回布尔类型值。
// includes indexof 这两个方法都可以实现检查数组是否包含某个元素
const mingzhu =["西游记","红楼梦","三国演义","水浒传"];
//判断
console.log(mingzhu.includes("西游记")); //true
console.log(mingzhu.includes("金瓶梅")); //false
指数操作符
**
指数操作符 和 Math.pow()
效果一样
console.log(2 **10);//1024
console.log(Math.pow(2,10));//1024
es8新特性
async函数
-
async函数的返回值为promise对象。
-
promise对象的结果由async函数执行的返回值决定
函数体内部返回的结果如果是一个非Promise类型的对象,调用函数后返回的结果就是成功Promise对象,promise对象的值为返回的值。
async function fn() {
return 'success';
}
let result = fn();
console.log(result);
如果函数体内抛出错误, 调用函数后返回的结果是一个失败的 Promise。
async function fn() {
throw new Error('出错啦');
}
let result = fn();
console.log(result);
如果函数体内返回是一个Promise对象。
async function fn() {
return new Promise(function (resolve, reject) {
//在Promise对象中如果执行resolve函数,async函数将返回成功的Promise对象。
//在Promise对象中如果执行reject函数,函数将返回失败的Promise对象
});
}
let result = fn();
console.log(result);
await表达式
- await必须写在 async函数中
- await右侧的表达式一般为promise对象
- await返回的是promise 成功的值
- await的 promise 失败了,就会抛出异常,需要通过try…catch捕获处理。
//创建promise对象
const p = new Promise((resolve, reject) => {
// resolve("用户数据");
reject("失败啦! ");
})
// await要放在async函数中
async function main() {
try {
let result = await p;//await返回的是promise 成功的值
console.log(result);
} catch (e) { //如果调用reject函数,捕获异常
console.log(e);
}
}
//调用函数
main();
async和await结合实践
const fs = require('fs');
function readWeiXue1() {
return new Promise((resolve, reject) => {
fs.readFile("./source/为学.md", function (err, data) {
if (err) reject(err);
resolve(data);
})
});
}
function readWeiXue2() {
return new Promise((resolve, reject) => {
fs.readFile("./source/为学1.md", function (err, data) {
if (err) reject(err);
resolve(data);
})
});
}
function readWeiXue3() {
return new Promise((resolve, reject) => {
fs.readFile('./source/为学2.md', function (err, data) {
if (err) reject(err);
resolve(data);
})
});
}
async function main() {
let wx1 = await readWeiXue1();
let wx2 = await readWeiXue2();
let wx3 = await readWeiXue3();
console.log(wx1.toString());
console.log(wx2.toString());
console.log(wx3.toString());
}
main();
async和await结合ajax实践
function sendAjax(method, url) {
return new Promise((resolve, reject) => {
//创建对象
let xhr = new XMLHttpRequest();
//初始化
xhr.open(method, url);
//发送
xhr.send();
//事件绑定
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
resolve(xhr.response)
} else {
reject(xhr.status);
}
}
}
})
}
async function main() {
let l1 = await sendAjax("GET", "https://www.tianqi.com/tianqi/mapdata_new.json");
console.log(l1);
}
main();
对象方法扩展
Object.values和 Object.entries
Object.values()
方法返回一个给定对象的所有可枚举属性值的数组
Object.entries()
方法返回一个给定对象自身可遍历属性[key,value]
的数组。这样的结果可以创建Map。
Object.getOwnPropertyDescriptors
该方法返回指定对象所有自身属性的描述对象,这些描述对象在创建对象时候设置的。
//声明对象
const school = {
name: "尚硅谷",
cities: ['北京', '上海', '深圳'],
xueke: ['前端', 'Java', '大数据', '运维']
};
console.log(Object.keys(school)); //以数组的形式返回对象的键值 ['name', 'cities', 'xueke']
console.log(Object.values(school));//以数组的形式返回对象的值 ['尚硅谷', Array(3), Array(4)]
let lv = Object.entries(school); //返回值可以当做 new Map时候的一个参数
console.log(lv);
let lvmap = new Map(lv);
console.log(lvmap);