ES6至ES12的新特性
我最常用的
ES6 的特性是使用最多的,包括类、模块化、箭头函数、函数参数默认值、模板字符串、解构赋值、延展操作符、Promise、let 与 const 等等,这部分已经是开发必备了,没什么好说的
另外还有:
- ES7 的
Array.prototype.includes()、**(指数运算符) - ES8 的 async/await 、String padding:
padStart()和padEnd()、Object.values() - ES9 的 Rest/Spread 属性、for await of、
Promise.finally() - ES10 的
Array.prototype.flat()、Array.prototype.flatMap()、String 的trimStart()trimEnd() - ES11 的
Promise.allSettled、空值处理及可选链 - ES12 的逻辑赋值操作符、数字分隔符、
Promise.any()
ES8(ES2018)
- async/await
- Object.values/Object.entries
- padStart()/padEnd()
- getOwnPropertyDescriptors
- 参数可以有多余逗号
- 共享内存和原子操作
Object.values/Object.entries
Object.entries:将对象转换为数组,获取键值对
javascript
const arr = {
name: 'johan',
age: 18,
gender: '男'
}
Object.enties(arr)
// [
// ['name': 'johan'],
// ['age': 18],
// ['gender': '男']
// ]Object.values:只获取值
javascript
const arr = {
name: 'johan',
age: 18,
gender: '男'
}
Object.values(arr)
// ['johan', 18, '男']之前 ES5 的 Object.keys:只获取键
javascript
const arr = {
name: 'johan',
age: 18,
gender: '男'
}
Object.values(arr)
// ['name', 'age', 'gender']最有用的
ES6 的特性都很有用,ES7-ES11 中,我比较感兴趣的是:
- ES8 的 async/await
- ES9 的 for await of
- ES11 的
Promise.allSettled、ES9 的Promise.finally()、ES12 的Promise.any() - 还有常用的逻辑操作:逻辑赋值操作符、数字分隔符、空值处理及可选链等都很大的简洁优化了我们的代码
其中,async/await 异步终极解决方案,for await of 异步串行,Promise.allSettled 解决了 Promise.all 的只要一个请求失败了就会抛出错误的问题,当我们一次发起多个请求时,所有结果都能返回,无论成功或失败,等等等,不了解的可以往下查找
空值合并运算符(??)
空值合并运算符(??)是一个逻辑运算符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。
相当于是 || 的升级版,因为 || 不能判断 ''、0 等情况, ''、0 会被视为 false
javascript
const foo = null ?? 'default string';
console.log(foo);
// 输出: "default string"
const baz = 0 ?? 42;
console.log(baz);
// 输出: 0可选链运算符(?.)
可选链运算符(?.)允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效
javascript
const adventurer = {
name: 'Alice',
cat: {
name: 'Dinah',
},
};
const dogName = adventurer.dog?.name;
console.log(dogName);
// 输出: undefined
console.log(adventurer.someNonExistentMethod?.());
// 输出: undefined
