ES2019 规范是对 JavaScript 的一个较小的补充,但它仍然带来了一些有用的功能。本文将向你展示五个 ES2019 新增的特性,这些特性或许可以让你的编程轻松一点。这些特性包括 trimStart()trimEnd()flat()flatMap()Object.fromEntries() 等。

字符串的 trimStart 和 trimEnd 方法

这两个方法都可以帮助你从给定的字符串中删除空白空间。第一个方法,trimStart() 将删除字符串开头的所有空白。第二个,trimEnd() 将删除字符串末尾的所有空白。如果你需要去除两边的空白,一种方法是同时使用这两个方法,另一种方法是使用 trim() 这个字符串方法。

  1. 'JavaScript'.trimStart()
  2. // Output:
  3. //'JavaScript'
  4. ' JavaScript'.trimStart()
  5. // Output:
  6. //'JavaScript'
  7. ' JavaScript '.trimStart()
  8. // Output:
  9. //'JavaScript '
  10. 'JavaScript '.trimStart()
  11. // Output:
  12. //'JavaScript '
  13. ' JavaScript'.trimEnd()
  14. // Output:
  15. //' JavaScript'
  16. ' JavaScript '.trimEnd()
  17. // Output:
  18. //' JavaScript'
  19. 'JavaScript '.trimEnd()
  20. // Output:
  21. //'JavaScript'

函数的 toString 方法

任何对象都有 toString() 方法, 函数也不例外。该方法的作用是允许你打印你或其他人编写的函数的代码。在 ES2019 之前,toString() 方法会删除注释和空白。因此,该函数的打印的版本可能与原始代码不一样。ES2019 发布后,toString() 方法返回的值将与原始值一致,包括注释、空白和特殊字符。

  1. // ES2019 之前:
  2. function myFunc /* is this really a good name? */() {
  3. /* Now, what to do? */
  4. }
  5. myFunc.toString()
  6. // Output:
  7. // "function myFunc() {}"
  8. // ES2019:
  9. function myFunc /* is this really a good name? */() {
  10. /* Now, what to do? */
  11. }
  12. myFunc.toString()
  13. // Output:
  14. // "function myFunc /* is this really a good name? */() {
  15. // /* Now, what to do? */
  16. // }"

数组的 flat 和 flatMap 方法

数组是 JavaScript 中的基本部分之一,它们有时也会让人头疼,尤其是当你要处理多维数组的时候。比如将多维数组变成一维数组这样一个看似简单的事件。现在 ES2019 为数组提供的 flat()flatMap() 方法可以让这个问题变得简单。

flat() 方法

第一个是 flat(),中文可以理解为展开或扁平化的意思。它的作用是把多维数组扁平化为一维数组。默认情况下,flat() 只会展开第一层。如果你需要扁平化更多的层数或深度,你可以指定一个层数或深度值,作为参数传递。如果你不确定多少层,你也可以使用 Infinity,表示有多少层展开多少展。

  1. // 创建一个数组:
  2. const myArray = ['JavaScript', ['C', 'C++', ['Assembly', ['Bytecode']]]]
  3. // 展开数组第一层
  4. let myFlatArray = myArray.flat(1)
  5. console.log(myFlatArray)
  6. // Output:
  7. // [ 'JavaScript', 'C', 'C++', [ 'Assembly', [ 'Bytecode' ] ] ]
  8. // 有多少层展开多少层
  9. let myInfiniteFlatArray = myArray.flat(Infinity)
  10. console.log(myInfiniteFlatArray)
  11. // Output:
  12. // [ 'JavaScript', 'C', 'C++', 'Assembly', 'Bytecode' ]

flatMap() 方法

除了 flat() 方法外,还有 flatMap() 方法。你可以把这个方法看作是 flat() 的高级版本。不同的是,flatMap() 方法结合了 flat()map() 方法。当你扁平化一个数组时,你可以调用一个回调函数。这允许你在扁平化的过程中对原数组内部的单个元素进行处理。当你想扁平化一个数组,但同时又想修改内容时,这就很方便了。

  1. // 创建一个数组:
  2. const myArray = ['One word', 'Two words', 'Three words']
  3. // 将数组中的字符串使用空格分隔
  4. // 注意:这会创建一个二维数组
  5. const myMappedWordArray = myArray.map((str) => str.split(' '))
  6. console.log(myMappedWordArray)
  7. // Output:
  8. // [ [ 'One', 'word' ], [ 'Two', 'words' ], [ 'Three', 'words' ] ]
  9. // flatMap() 示例
  10. const myArray = ['One word', 'Two words', 'Three words']
  11. // 将数组中的字符串使用空格分隔
  12. const myFlatWordArray = myArray.flatMap((str) => str.split(' '))
  13. console.log(myFlatWordArray)
  14. // Output:
  15. // [ 'One', 'word', 'Two', 'words', 'Three', 'words' ]

Object.fromEntries() 方法

当你需要将一些对象转换为数组时,你可以用 entries() 方法来实现,但反过来将对象的数组合并为单个对象,在 ES2019 之前还没有一个现成的方法。ES2019 提供了 fromEntries() 方法。这个方法的作用很简单。它接受一个键值对的迭代,如数组或Map。然后,它将其转换为一个对象。

  1. // 将数组转换为对象:
  2. const myArray = [
  3. ['name', 'Joe'],
  4. ['age', 33],
  5. ['favoriteLanguage', 'JavaScript'],
  6. ]
  7. const myObj = Object.fromEntries(myArray)
  8. console.log(myObj)
  9. // Output:
  10. // {
  11. // name: 'Joe',
  12. // age: 33,
  13. // favoriteLanguage: 'JavaScript'
  14. // }
  15. // 将 Map 转换为对象:
  16. const myMap = new Map([
  17. ['name', 'Spike'],
  18. ['species', 'dog'],
  19. ['age', 3],
  20. ])
  21. const myObj = Object.fromEntries(myMap)
  22. console.log(myObj)
  23. // Output:
  24. // {
  25. // name: 'Spike',
  26. // species: 'dog',
  27. // age: 3
  28. // }

catch 的参数变成可选

以前,当你使用 try...catch 时,你必须把异常作为一个参数传递给 catch,即使你没有使用这个参数。ES2019 把这个参数变成可选项。如果你不想使用异常,你可以使用不带参数的 catch 块。

  1. // ES2019 之前:
  2. try {
  3. // Do something.
  4. } catch (e) {
  5. // 没有用到异常参数 e
  6. // 但该参数不能省略
  7. }
  8. // ES2019:
  9. try {
  10. // Do something.
  11. } catch {
  12. // 没有用到异常参数,可以省略
  13. }

小结

以上五个特性是我觉得比较有用的。除了这五个特性,ES2019 标准还增加了其它的特性或改进,本文没有全部列举出来,如果感兴趣可以查阅官方文档。

快速了解 JavaScript ES2019 的五个新增特性的更多相关文章

  1. 探究JavaScript中的五种事件处理程序

    探究JavaScript中的五种事件处理程序 我们知道JavaScript与HTML之间的交互是通过事件实现的.事件最早是在IE3和Netscape Navigator 2中出现的,当时是作为分担服务 ...

  2. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)

    RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本 新增企业通(内部简易聊天工具) RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用 ...

  3. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增岗位管理-WinForm部分

    RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本 新增岗位管理-WinForm部分 岗位(职位)管理模块主要是针对组织机构的岗位(职位)进行管理,包括:增加.修改. ...

  4. js快速打印一个五分制(五颗星)的评分情况

    1.函数 下面这个函数实现了在html页面中快速打印一个五分制(五颗星)的评分情况: function getRating(rating) { if(rating > 5 || rating & ...

  5. Javascript多线程引擎(五)

    Javascript多线程引擎(五)之异常处理 C语言没有提供一个像Java一样的异常处理机制, 这就带来了一个问题, 对于一个子函数中发生异常后, 需要在父函数调用子函数的位置进行Check, 如果 ...

  6. .NET快速信息化系统开发框架 V3.2->Web版本新增“文件管理中心”集上传、下载、文件共享等一身,非常实用的功能

    文件中心是3.2版本开始新增的一个非常实用功能,可以归档自己平时所需要的文件,也可以把文件分享给别人,更像一个知识中心.文件中心主界面如下图所示,左侧“我的网盘”展示了用户对文件的分类,只能自己看到, ...

  7. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->WinForm版本新增新的角色授权管理界面效率更高、更规范

    角色授权管理模块主要是对角色的相应权限进行集中设置.在角色权限管理模块中,管理员可以添加或移除指定角色所包含的用户.可以分配或授予指定角色的模块(菜单)的访问权限.可以收回或分配指定角色的操作(功能) ...

  8. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本新增新的角色授权管理界面效率更高、更规范

    角色授权管理模块主要是对角色的相应权限进行集中设置.在角色权限管理模块中,管理员可以添加或移除指定角色所包含的用户.可以分配或授予指定角色的模块(菜单)的访问权限.可以收回或分配指定角色的操作(功能) ...

  9. Javascript数组系列五之增删改和强大的 splice()

    今天是我们介绍数组系列文章的第五篇,也是我们数组系列的最后一篇文章,只是数据系列的结束,所以大家不用担心,我们会持续的更新干货文章. 生命不息,更新不止! 今天我们就不那么多废话了,直接干货开始. 我 ...

随机推荐

  1. window.locationbar

    window.locationbar demo https://cdn.xgqfrms.xyz/#/operate-tool/select-seat-system/select-detail?temp ...

  2. JavaScript中判断对象是否属于Array类型的4种方法及其背后的原理与局限性

    前言 毫无疑问,Array.isArray是现如今JavaScript中判断对象是否属于Array类型的首选,但是我认为了解本文其余的方法及其背后的原理与局限性也是很有必要的,因为在JavaScrip ...

  3. [转]ROS订阅激光数据

    https://github.com/robopeak/rplidar_ros/blob/master/src/client.cpp /*   * Copyright (c) 2014, RoboPe ...

  4. Python 爬虫使用动态切换ip防止封杀

    对于爬虫被封禁 ! 爬虫一般来说只要你的ip够多,是不容易被封的. 一些中小网站要封杀你,他的技术成本也是很高的,因为大多数网站没有vps,他们用的是虚拟空间或者是sae,bae这样的paas云. 其 ...

  5. HTTP/1.1报文详解

    本文为<三万长文50+趣图带你领悟web编程的内功心法>第三个章节. 3.HTTP/1.1报文详解 在RFC2616中心详细的描述了HTTP/1.1[1]的报文,感兴趣的朋友也可以前往阅读 ...

  6. oracle 导入导出dmp

    exp 用户名/密码@地址:端口/serviceName file=D:\710.dmp exp test710/test710@192.168.15.134:1521/doit file=D:\71 ...

  7. Linux关机指令详解

    Linux关机指令 在linux领域内大多用在服务器上,很少遇到关机的操作.毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机. 正确的关机流程为:sync > shutdown ...

  8. python进阶(9)多线程

    什么是线程? 线程也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位.线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其 ...

  9. EFCodeFirst关系映射约定

    EFCodeFirst关系映射约定 EFCodeFirst 关系映射约定 默认多重关系的一些约定规则: 1.一对多关系 两个类中分别包含一个引用和一个集合属性. 两个类中一个类包含另一个类的引用属性. ...

  10. kali 下的邮件发送工具 swaks

    kali 下的邮件发送工具 swaks Swaks 是一个功能强大,灵活,可编写脚本,面向事务的 SMTP 测试工具,目前 Swaks 托管在私有 svn 存储库中. 官方项目 http://jetm ...