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