JavaScript ES2019的新增功能

对于最新版本的Javascript ,有一个标准的过程,背后有一个完整的委员会。 在本文中,我将讨论谁对任何新规范进行决策,执行该规范的过程以及ES2019中的新增功能

图片

控制JavaScript的语言规范称为ECMAScript 。 有一个称为技术委员会39 [TC39]的小组,负责在通过之前审查每个规范。

每个更改分阶段进行:

  • 阶段0:创意
  • 阶段1:优惠
  • 第二阶段:草稿
  • 第三阶段:候选人
  • 阶段4:完成/批准

达到阶段4的功能可能是语言规范的一部分。

考虑根据ES2019添加到规范中的内容。

Array.prototype {Flat,flatMap}


Array.prototype.flat()允许您将数组递归平滑到给定深度,并返回一个新数组。

语法: Array.prototype.flat(深度)
depth-默认值是1,使用Infinity平滑所有嵌套数组。

const numbers = [1, 2, [3, 4, [5, 6]]]; // Considers default depth of 1 numbers.flat(); > [1, 2, 3, 4, [5, 6]] // With depth of 2 numbers.flat(2); > [1, 2, 3, 4, 5, 6] // Executes two flat operations numbers.flat().flat(); > [1, 2, 3, 4, 5, 6] // Flattens recursively until the array contains no nested arrays numbers.flat(Infinity) > [1, 2, 3, 4, 5, 6] 

Array.prototype.flatMap()使用映射函数映射每个元素,并将结果对齐到新数组。 这与地图操作相同,其后的平坦深度为1。

语法: Array.prototype.flatMap(回调)
回调:产生新数组元素的函数

 const numbers = [1, 2, 3]; numbers.map(x => [x * 2]); > [[2], [4], [6]] numbers.flatMap(x => [x * 2]); > [2, 4, 6] 

Object.fromEntries


Object.fromEntries与Object.entries相反。 它将键值对列表转换为对象。

语法: Object.fromEntries(可迭代)
迭代:迭代为实现可迭代协议的 ArrayMap对象。

 const records = [['name','Mathew'], ['age', 32]]; const obj = Object.fromEntries(records); > { name: 'Mathew', age: 32} Object.entries(obj); > [['name','Mathew'], ['age', 32]]; 

String.prototype。{TrimStart,trimEnd}


trimStart()删除行首的空格, trimEnd()删除行首的空格。

 const greeting = ` Hello Javascript! `; greeting.length; > 19 greeting = greeting.trimStart(); > 'Hello Javascript! ' greeting.length; > 18 greeting = 'Hello World! '; greeting.length; > 15 greeting = greeting.trimEnd(); > 'Hello World!' greeting.length; > 12 

可选的捕捉绑定


在新规范之前,要求具有绑定到catch语句的异常变量。 ES2019使其成为可选。

 // Before try { ... } catch(error) { ... } // After try { ... } catch { ... } 

如果要完全忽略该错误,此功能很有用。 最佳实践是考虑错误处理。

有时您知道执行操作时可能会发生的错误。 您可以忽略捕获处理。

JSON⊂ECMAScript


现在,字符串文字中允许使用行分隔符(U + 2028)和段落分隔符(U + 2029)。 以前,它们被视为字符串终止符,并引发了SyntaxError异常。

 // Produces invalid string before ES2019 eval('"\u2028"'); // Valid in ES2019 eval('"\u2028"'); 

格式正确的JSON.stringify


ES10不是使用成对的代理代码点来生成单个UTF-16代码单元,而是使用JSON转义序列来表示它们。

 JSON.stringify('\uD800'); > '" "' JSON.stringify('\uD800'); > '"\\ud800"' 

Function.prototype.toString


.toString()现在返回源代码的精确片段,包括空格和注释。

 function /* a comment */ foo () {} // Previously: foo.toString(); > 'function foo() {}' ^ no comment ^ no space // Now: foo.toString(); > 'function /* comment */ foo () {}' 

Symbol.prototype.description


一个只读属性,它返回Symbol对象的可选描述:

 Symbol('desc').toString(); > "Symbol(desc)" Symbol('desc').description; > "desc" Symbol('').description; > "" Symbol().description; > undefined 

结论


还有许多其他有趣的事情,例如类中的静态和私有方法和字段,旧版RegEx等。 对于开发人员而言,监视新技术的出现,改进旧技术并在工作中使用它非常重要。

阅读以前的版本会很有用: ES2015 ES2016 ES2017 ES2018

Source: https://habr.com/ru/post/zh-CN439532/


All Articles