异步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,可展开任意深度的嵌套数组