前言
ES8是2017年发布的新特性,也被称为ES2017。
1、异步函数(async、await)
异步函数的引入,解决了异步函数同步的问题。使用promise请求时,虽然解决了回调地狱的问题,
但是使用多个then()链式调用显得代码可读性也不强。
async关键字作用于函数上,使函数返回一个promise对象,async函数内部,可以使用await关键字来暂停异步代码的执行,等await关键字的异步或普通函数的执行结果。
<script>
function requireApi(s) {
return new Promise(resolve => {
setTimeout(()=>{
console.log(s);
resolve(s);
},s);
})
}
async function getData(){
await requireApi(1000);
await requireApi(300);
await requireApi(500);
}
getData();
</script>
打印输出结果: 1000 300 500
await暂停代码,等待结果返回才会继续往下执行,这对于处理异步操作提供了更简洁的语法。
Object.getOwnPropertyDescriptors()
Object.getOwnPropertyDescriptors()方法可以返回对象所有自身属性的描述符,包括可枚举的属性和不可枚举的属性。
let obj = {
name: '看看',
age: 12
}
let des = Object.getOwnPropertyDescriptors(obj);
console.log(des.name)
console.log(des.age)
控制台结果如下:
字符串填充方法(padStart(),padEnd() )
很多时候数据显示需要统一格式,之前还需要判断数据的长度再进行数据填充,现在引入了字符串填充方法,无论是想要在前面填充还是后面填充皆可满足,使得代码的书写非常简洁方便。
padStart(),padEnd() 两个参数,第一个表示字符串填充长度,第二个是填充数据,当本身数据长度大于或等于填充的长度时,字符串不变,返回原本的字符串。
let str = '123';
console.log(str.padEnd(10,'-'));
console.log(str.padEnd(3,'-'));
运行结果如下:
共享内存与原子操作(Shared Memory and Atomics)
引入了SharedArrayBuffer和Atomics对象,用于在多个Agent(如Web Worker)之间共享内存,并提供了原子操作来确保共享内存的安全性,避免竞争条件。
// 创建一个共享内存
const buffer = new SharedArrayBuffer(8);
// 创建一个32位有符号整数视图
const view = new Int32Array(buffer);
// 在不同的Agent中读写共享内存
view[0] = 42;
console.log(view[0]); // 输出 42