JavaScript: ES2019更新了什么呢?

原文:blog.tildeloop.com/posts/javas…
译者:前端技术小哥javascript

JavaScript(JS)是最流行的编程语言之一,也是Web开发的主要语言之一,它在不断发展,每一次迭代都会带来一些新的内部变化。让咱们来看看ES2019的一些新功能,它们可能很快就会进入咱们的平常代码:前端

Array.flat()
如今咱们能够将嵌套数组按照指定的深度递归展开。默认值是1,若是想彻底展开则使用Infinity。该方法不会修改原始数组,而是建立一个新的数组:java

const arr1 = [1, 2, [3, 4]];
arr1.flat(); // [1, 2, 3, 4]

const arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat(2); // [1, 2, 3, 4, 5, 6]

const arr3 = [1, 2, [3, 4, [5, 6, [7, 8]]]];
arr3.flat(Infinity); // [1, 2, 3, 4, 5, 6, 7, 8]
复制代码

若是你的数组中有一个空槽,它将被删除:编程

const arr4 = [1, 2, , 4, 5];
arr4.flat(); // [1, 2, 4, 5]
复制代码

Array.flatMap()
这是一个全新的方法,它结合了基本的map函数,而后使用新的Array.flat()方法将结果展平1个深度:数组

const arr1 = [1, 2, 3];

arr1.map(x => [x * 4]); // [[4], [8], [12]]
arr1.flatMap(x => [x * 4]); // [4, 8, 12]
复制代码

另外一个更有用的例子:bash

const sentence = ["This is a", "regular", "sentence"];

sentence.map(x => x.split(" ")); // [["This","is","a"],["regular"],["sentence"]]
sentence.flatMap(x => x.split(" ")); // ["This","is","a","regular", "sentence"]

复制代码

String.trimStart() and String.trimEnd()
除了同时删除字符串两边的空格的String.Trim()以外,如今还出现了另外一个方法只删除字符串两边任意一边的空格:编程语言

const test = " hello ";

test.trim(); // "hello";
test.trimStart(); // "hello ";
test.trimEnd(); // " hello";
复制代码

Object.fromEntries
这是一个全新的方法:根据提供的键值对生成对象。它是咱们熟悉的函数Object.Entries的逆向操做。(Object.Entries将对象转换为数组,以便更容易地进行操做。)在转换以后,咱们会获得一个数组,可是如今咱们能够将调整事后的数组返回到一个对象中。让咱们试着用一个例子,咱们想平方全部对象属性的值:函数

const obj = { prop1: 2, prop2: 10, prop3: 15 };

let array = Object.entries(obj); // [["prop1", 2], ["prop2", 10], ["prop3", 15]]

复制代码

让咱们用一个简单的映射将新生成的键值对的值平方:oop

array = array.map(([key, value]) => [key, Math.pow(value, 2)]); // [["prop1", 4], ["prop2", 100], ["prop3", 225]]post

咱们已经转换了对象值,但咱们只剩下一个数组,这时候咱们就须要Object.fromEntries,它将数组转换回一个对象:

const newObj = Object.fromEntries(array); // {prop1: 4, prop2: 100, prop3: 225}

可选的catch绑定
这个新提案使咱们可以彻底省略catch()块,由于在不少状况下,咱们并不须要它:

try {
  //...
} catch (er) {
  //handle error with parameter er
}

try {
  //...
} catch {
  //handle error without parameter
}

复制代码

Symbol.description
咱们如今能够任意访问一个Symbol的description属性,无需借助toString()方法。

const testSymbol = Symbol("Desc");

testSymbol.description; // "Desc"
复制代码

函数.toString ()
如今,咱们对一个函数调用toString(),将彻底按照定义的方式返回函数,包括空格和注释。以前咱们有:

function /* foo comment */ foo() {}

foo.toString(); // "function foo() {}"
复制代码

而后如今是:

foo.toString(); // "function /* foo comment */ foo() {}"

JSON.parse()
如今,行分隔符 (\u2028) 和段落分隔符 (\u2029) 能被正确地解析,而不会致使SyntaxError。

但愿本文能帮助到您!

看以后
点赞,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
关注公众号「新前端社区」,享受文章首发体验!
每周重点攻克一个前端技术难点。