ES2017提供的新特性:
1.Async 函数呈现更清晰的 Promise 语法
Async 函数也就是我们常说的Async/Await,是一种用于处理JS异步回调的语法糖,可以帮助我们摆脱回调地狱。
login(userName) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('1001');
}, 600);
});
}
getData(userId) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (userId === '1001') {
resolve('Success');
} else {
reject('Fail');
}
}, 600);
});
}
// 不使用async/await ES7
doLogin(userName) {
this.login(userName)
.then(this.getData)
.then(result => {
console.log(result)
})
}
// 使用async/await ES8
async doLogin2(userName) {
const userId=await this.login(userName);
const result=await this.getData(userId);
}
this.doLogin()// Success
this.doLogin2()// Success
2.
使用Object.values()遍历对象的属性值,无需使用使用属性名:
let obj = {a: 1, b: 2, c: 3}
Object.values(obj).forEach(value =>{ console.log(value); // 输出1, 2, 3})
3.
使用Object.entries()遍历对象的属性名和属性值:
let obj = {a: 1, b: 2, c: 3};
Object.entries(obj).forEach(([key, value]) =>{
console.log(key + ": " + value); // 输出a: 1, b: 2, c: 3
})
4.Object.getOwnPropertyDescriptors()
方法用来获取一个对象的所有自身属性的描述符。
Object.create(
Object.getPrototypeOf(obj),
Object.getOwnPropertyDescriptors(obj)
);
5.
padStart()
方法用另一个字符串填充当前字符串(如果需要,多次),直到结果字符串达到给定长度。填充从当前字符串的开头(左侧)开始应用。
const str1 = '5';
console.log(str1.padStart(2, '0'));
// expected output: "05"
const fullNumber = '2034399002125581';
const last4Digits = fullNumber.slice(-4);
const maskedNumber = last4Digits.padStart(fullNumber.length, '*');
console.log(maskedNumber);
// expected output: "************5581"
padEnd()
方法会用一个字符串填充当前字符串(如果需要的话则重复填充),返回填充后达到指定长度的字符串。从当前字符串的末尾(右侧)开始填充。
'abc'.padEnd(10); // "abc "
'abc'.padEnd(10, "foo"); // "abcfoofoof"
'abc'.padEnd(6, "123456"); // "abc123"
'abc'.padEnd(1); // "abc"
6.结尾逗号,数组定义和函数参数列表
var f = function(a,
b,
c,
d, // d之后允许带逗号
) {
console.log(d)}
7.ShareArrayBuffer
和Atomics
用于从共享内存位置读取和写入
SharedArrayBuffer
对象用来表示一个通用的,固定长度的原始二进制数据缓冲区,类似于 ArrayBuffer
对象,它们都可以用来在共享内存(shared memory)上创建视图。与 ArrayBuffer
不同的是,SharedArrayBuffer
不能被分离。
语法
new SharedArrayBuffer(length)
参数
length
:所创建的数组缓冲区的大小,以字节(byte)为单位。
返回值
一个大小指定的新 SharedArrayBuffer
对象。其内容被初始化为 0。
let sab = new SharedArrayBuffer(1024);
worker.postMessage(sab);
Atomics
对象提供了一组静态方法用来对 SharedArrayBuffer
对象进行原子操作。
这些原子操作属于 Atomics
模块。与一般的全局对象不同,Atomics
不是构造函数,因此不能使用 new 操作符调用,也不能将其当作函数直接调用。Atomics
的所有属性和方法都是静态的(与 Math
对象一样)。
属性
Atomics[Symbol.toStringTag]
该属性的值为“Atomics”。
更多ES2017特性,见What's New in ES2017
copyright 少年广坤的烦恼