ES2017(ES8)新特性

ECMAScript语言规范的第8个版本发布(ES2017)。来看看怎么使用它们。

Object.values() / Object.entries()

在ES6前,如果我们想拿一个对象的所有值放在数组中,可能得这么写:

var object = {a: 1, b: 2, c: 3};
var array = [];
for (var key in object) {
  if (object.hasOwnProperty(key)) {
    array.push(object[key]);
  }
}
array;  // [1, 2, 3]

现在,通过 Object.values() 可以便捷的取出来:

const object = {a: 1, b: 2, c: 3};
Object.values(object);  // [1, 2, 3]

Object.entries() 则是 Object.keys() 和 Object.entries() 的结合形式,返回一个 key value 键值对的数组。

const object = {a: 1, b: 2, c: 3};
Object.entries(object);  // [['a', 1], ['b', 2], ['c', 3]]

Object.entries() 获得的数组可用于ES6带来的 Map 结构:

const object = {a: 1, b: 2, c: 3};
const map = new Map(Object.entries(object));  // Map(3) {"a" => 1, "b" => 2, "c" => 3}

String.prototype.padStart() / String.prototype.padEnd()

这两个函数的作用是在头尾添加字符串,它们接收两个参数 str.padStart(targetLength [, padString]),其中 targetLength 表示填充完的字符串长度,padString 表示填充的字符串,默认空格

'es8'.padStart(4);          // ' es8',默认填入空格
'es8'.padEnd(4, '0');       // 'es80',填充自定义字符串
'es8'.padStart(2);          // 'es8',如果长度小于原字符串,返回原字符串
'es8'.padStart(6, 'abcd');  // 'abces8',如果填充字符串+原字符串长度大于给定长度,则从填充字符串左边开始截取
'es8'.padEnd(6, 'abcd');    // 'es8abc',padEnd也是从填充字符串左边开始截取
'es8'.padStart(7, 'abc');   // 'abcaes8',如果填充字符串+原字符串长度小于给定长度,则从填充字符串重复填充

Object.getOwnPropertyDescriptors

该函数返回指定对象(参数)的所有自身属性描述符。自身属性描述符就是在对象自身内定义,不是通过原型链继承来的属性。该函数返回的每个描述符对象可能会有的 key 值分别是:configurableenumerablewritablegetsetvalue

const object = { 
  a: 1,
  get b() { return 2; }
};

Object.getOwnPropertyDescriptors(object);
// {
//   a: {
//     configurable: true,
//     enumerable: true,
//     value: 1,
//     writable: true
//   },
//   b: {
//     configurable: true,
//     enumerable: true,
//     get: f b(), //the getter function
//     set: undefined
//   }
// }

函数参数列表和调用中的尾逗号

ES8允许在函数定义或者函数调用时,最后一个参数之后存在一个结尾逗号而不报SyntaxError的错误。

function foo(a, b, c,) {
  // doSomething
}

foo(1, 2, 3,);

这种情况常见于多行参数风格,

foo(
  1,
  2,
  3,
);

现在再也不会因为增加参数忘了删除逗号而导出报错了。

async/await 异步函数

async 关键字定义的函数声明定义了一个可以异步执行的函数,它返回一个 Async Function 类型的对象。

async function add10 (num) {
  return num + 10;
}
add10; // async ƒ add10 (num) {return num + 10;}

它的返回值是一个 Promise 实例:

add10(10); // Promise {<fulfilled>: 20}

await 放置在 Promise 调用之前,await 强制后面点代码等待,直到 Promise 对象resolve,得到 resolve 的值作为await表达式的运算结果。且 await 只能在 async 函数内部使用。

async function foo() {
  let num = await add10(10);
  console.log(num);  // 20
  return num + 10;
}

foo();  // Promise {<fulfilled>: 30}

如果想获得 Promisecatch 情况,我们可以通过 try...catch 来解决。

function throwError() {
  return Promise.reject(new Error('error'));
}

async function foo() {
  try {
    await throwError(10);
  } catch(e) {
    console.log(e);  // Error: error
  }
  return true;
}

foo();  // Promise {<fulfilled>: true}

参考资料

合集

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356