异步async/await
async/await是Promise的升级版,为了解决异步调用的问题。
如果async函数显示返回的不是Promise,会自动修饰成Promise对象。
async function asyncFn(){return "hello world!"}console.log(asnycFn() instanceof Promise) // true//以上定义的函数等同于async function asyncFn(){return Promise.resolve("hello world!")}
异步操作集合
For await of
Object对象遍历
keys
当使用for of 变量对象时,会提示 TypeError: obj is not iterable
var obj = { 'France': 'Paris', 'England': 'London' };for (let p of obj) { // TypeError: obj is not iterable// …}
那么就可以使用Object.keys进行遍历,keys只是获取对象的key,values可以遍历出对象的值
var obj = { 'France': 'Paris', 'England': 'London' };// Iterate over the property names:console.log(Object.keys(obj));// ["France", "England"]
values
var obj = { 'France': 'Paris', 'England': 'London' };// Iterate over the property names:console.log(Object.values(obj)); //["Paris", "London"]
entries
var obj = { 'France': 'Paris', 'England': 'London' };// Iterate over the property names:console.log(Object.entries(obj)); //[["France","Paris"],["England", "London"]]
getOwnPropertyDescriptor
获取对象的属性描述符,即enumerable,writable,configurable,value
var obj = { 'France': 'Paris', 'England': 'London' };Object.defineProperty(obj, "England", {enumerable: false})console.log(Object.keys(obj)); //["France"]console.log(Object.getOwnPropertyDescriptors(obj));//England属性不可枚举,所以keys取不到England的值{"France": {"value": "Paris","writable": true,"enumerable": true,"configurable": true},"England": {"value": "London","writable": true,"enumerable": false,"configurable": true}}//获取对象某一属性的值console.log(Object.getOwnPropertyDescriptor(obj, 'France'));
fromEntries
可以将键值对数组转为对象,更方便查找对应的属性。
前端和后端交互数据是,会碰到[ [“name”, “pp”], [“age”, 12]]这样的数据。在前端不方便获取对象的值。就可以使用新增的对象方法fromEntries,将数组转为对象
Object.fromEntries([ ["name", "pp"], ["age", 12] ]);// 输出结果:{name: "pp", age: 12}
数组
flat扁平化
let arr = [1,2,[3],[[4],[5,6]];console.log(arr.flat(2)); //对数组扁平化,参数设置扁平化深度console.log(arr.flat(Infinity)) // 使用 Infinity,可展开任意深度的嵌套数组
