ECMAScript 2019,也称为 ES2019,是 JavaScript 的最新标准。它包含了一些有趣而强大的新特性,可以使我们的 JavaScript 代码更加精简、高效和易读。在本文中,我们将探索 ES2019 的一些新特性,并提供一些有趣的练习,帮助你熟悉这些新特性并开始使用它们。
1. Array.prototype.flat()
Array.prototype.flat()
方法使用深度优先遍历策略,将嵌套的数组展平成一个新数组。默认会展平一层。如果需要展平多层,可以传递一个数字作为参数,表示要展平的层数。
const arr = [1, 2, [3, 4, [5, 6]]]; console.log(arr.flat()); // [1, 2, 3, 4, [5, 6]] console.log(arr.flat(2)); // [1, 2, 3, 4, 5, 6]
练习:
给定一个包含嵌套数组的二维数组,请编写一个函数 flatten
,将这个二维数组展平成一个一维数组。
// 输入:[[1, 2], [3, [4, 5]], [], [6]] // 输出:[1, 2, 3, 4, 5, 6] function flatten(arr) { return arr.flat(Infinity); } console.log(flatten([[1, 2], [3, [4, 5]], [], [6]])); // [1, 2, 3, 4, 5, 6]
2. Array.prototype.flatMap()
Array.prototype.flatMap()
方法首先使用映射函数对数组进行映射,然后将结果展平成一个新数组。
const arr = [1, 2, 3]; console.log(arr.flatMap(x => [x, x * 2])); // [1, 2, 2, 4, 3, 6]
练习:
给定一个包含字符串的数组,请编写一个函数 getWords
,将所有字符串按单词展开,并去重。单词之间以空格分隔。
// 输入:['hello world', 'world is good', 'hello good'] // 输出:['hello', 'world', 'is', 'good'] function getWords(arr) { return arr.flatMap(str => str.split(' ')).filter((word, idx, self) => self.indexOf(word) === idx); } console.log(getWords(['hello world', 'world is good', 'hello good'])); // ['hello', 'world', 'is', 'good']
3. Optional catch binding
在 ES2019 中,你可以写出一个 try-catch
块,但省略 catch
语句中的参数。
这在你只对错误发生的事实感兴趣,并不需要错误对象本身时非常有用。
try { // some code } catch { console.error('An error occurred!'); }
4. Object.fromEntries()
Object.fromEntries()
方法可以把一个包含键值对的数组转换为一个对象。
const entries = [['a', 1], ['b', 2], ['c', 3]]; const obj = Object.fromEntries(entries); console.log(obj); // {a: 1, b: 2, c: 3}
练习:
给定一个对象,请编写一个函数 swapKeyValue
,交换它的键和值,并返回这个新对象。
-- -------------------- ---- ------- -- ------ -- -- -- -- -- -- ------ ---- -- ---- -- ---- -------- ----------------- - ----- ------- - ------------------------------ ----- -- ----- ------ ------ ---------------------------- - ---------------------------- -- -- -- -- ----- -- --- ---- -- ---- -- ----
5. String.prototype.trimStart() 和 String.prototype.trimEnd()
ES2019 引入了两个新方法 String.prototype.trimStart()
和 String.prototype.trimEnd()
,分别可以从字符串的开头和结尾去除空格。
const str = ' hello world '; console.log(str.trimStart()); // 'hello world ' console.log(str.trimEnd()); // ' hello world'
6. catch 关键字的可选参数
在之前的标准中,catch
关键字的参数默认是必须的,如果你不需要捕获错误对象本身,就要给它提供一个占位符。
在 ES2019 中,你可以省略它,就像在“Optional catch binding”一节中所介绍的那样。
try { // some code } catch (_) { console.error('An error occurred!'); }
7. Function.toString() 现在返回精确字符
在 ES2019 之前,Function.toString()
方法返回的函数字符串可能与原来的代码不完全匹配。
在 ES2019 中,Function.toString()
方法的实现已经完全被规范化,它现在返回与源代码完全精确的字符串表示形式。
function add(a, b) { return a + b; } const addStr = add.toString(); console.log(addStr); // function add(a, b) { return a + b; }
总结
ES2019 引入了一些有趣而强大的新特性,可以使我们的 JavaScript 代码更加精简、高效和易读。本文中,我们探索了这些新特性并提供了一些有趣的练习,帮助你熟悉这些新特性并开始使用它们。
现在是时候在你的代码中开始使用 ES2019 的新特性了,它们将帮助你编写更加强大的 JavaScript 代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64fecc2495b1f8cacdd78604