ES8新增特性

87 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第30天

ES8新增特性

Object.keys和Object.values方法

ES8中,为我们新增了Object.keys和Object.values两个方法

传入对象时,便可返回包含对应key及value的数组,例如👇

let obj = {
    name: '何小幸',
    age: 18
}
​
console.log(Object.keys(obj));
console.log(Object.values(obj))

输出:

['name', 'age']
['何小幸', 18]

当传入数组时👇

Object.values([1,2,3,4]);//会原封不动将数组返回
Object.keys([1,2,3,4]);//会将其内元素转换为字符串再返回:['0', '1', '2', '3']

当传入字符串时👇

Object.values("abc");//会将其拆分并组成数组:['a', 'b', 'c']
Object.keys(“abc);//报错,不能传入字符串

Object.entries方法

Object.entries方法可以获取到一个数组,数组中会存放可枚举属性的键值对数组

传入对象时,数组中就是:[[键,值], [键,值], [键,值]]这样的形式👇

let obj = {
    name: '何小幸',
    age: 18
}
​
console.log(Object.entries(obj));//输出[['name', '何小幸'], ['age', 18]]

传入数组时,生成以索引值为键,后跟值的形式:[[0, 值], [1, 值], [2, 值]]

console.log(Object.entries(['a', 'b', 'c']));//输出[['0', 'a'], ['1', 'b'], ['2', 'c']]

padStart和padEnd方法

某些字符我们需要对其进行前后的填充,来实现某种格式化的效果,ES8中就为我们增加了padStart和padEnd方法,可以分别对我们的字符串首尾进行填充。

如何填充呢?

比如:

let hello = "world";
console.log(hello.padStart(15));

如上代码就会输出: world,world的前方被以空格进行填充,我们可以通过第二个参数来指定要填充的内容:

console.log(hello.padStart(15,"6"));

这样填充后的字符串就变成了:6666666666world

同理,padEnd方法与padStart用法相同,区别只在填充位置

Trailing-Commas

ES8新增的Trailing-Commas特性,可以支持我们在定义及调用方法时多写一个逗号而不会报错:

function fn(a, b,){
    //...
}
fn(1, 2,)

Object.getOwnPropertyDescriptors

该方法可以帮助我们获取对象中的所有属性描述符

let obj = {
    name: '何小幸',
    age: 18
}
console.log(Object.getOwnPropertyDescriptors(obj))

输出:

{name: {}, age: {}}
age: {value: 18, writable: true, enumerable: true, configurable: true}
name: {value: '何小幸', writable: true, enumerable: true, configurable: true}
[[Prototype]]: Object

async和await

async用来声明一个异步函数,await操作符用于等待一个Promise兑现并获取它兑现之后的值。

function foo(a) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(a);
    }, 1000);
  });
}
​
async function bar() {
  let a = await foo(20);
  console.log(a); // 等待1秒后输出,20
}
​
bar();