快速了解 JavaScript ES2019 的五个新增特性
ES2019 规范是对 JavaScript 的一个较小的补充,但它仍然带来了一些有用的功能。本文将向你展示五个 ES2019 新增的特性,这些特性或许可以让你的编程轻松一点。这些特性包括 trimStart()
、trimEnd()
、flat()
、flatMap()
、Object.fromEntries()
等。
字符串的 trimStart 和 trimEnd 方法
这两个方法都可以帮助你从给定的字符串中删除空白空间。第一个方法,trimStart()
将删除字符串开头的所有空白。第二个,trimEnd()
将删除字符串末尾的所有空白。如果你需要去除两边的空白,一种方法是同时使用这两个方法,另一种方法是使用 trim()
这个字符串方法。
'JavaScript'.trimStart()
// Output:
//'JavaScript'
' JavaScript'.trimStart()
// Output:
//'JavaScript'
' JavaScript '.trimStart()
// Output:
//'JavaScript '
'JavaScript '.trimStart()
// Output:
//'JavaScript '
' JavaScript'.trimEnd()
// Output:
//' JavaScript'
' JavaScript '.trimEnd()
// Output:
//' JavaScript'
'JavaScript '.trimEnd()
// Output:
//'JavaScript'
函数的 toString 方法
任何对象都有 toString()
方法, 函数也不例外。该方法的作用是允许你打印你或其他人编写的函数的代码。在 ES2019 之前,toString()
方法会删除注释和空白。因此,该函数的打印的版本可能与原始代码不一样。ES2019 发布后,toString()
方法返回的值将与原始值一致,包括注释、空白和特殊字符。
// ES2019 之前:
function myFunc /* is this really a good name? */() {
/* Now, what to do? */
}
myFunc.toString()
// Output:
// "function myFunc() {}"
// ES2019:
function myFunc /* is this really a good name? */() {
/* Now, what to do? */
}
myFunc.toString()
// Output:
// "function myFunc /* is this really a good name? */() {
// /* Now, what to do? */
// }"
数组的 flat 和 flatMap 方法
数组是 JavaScript 中的基本部分之一,它们有时也会让人头疼,尤其是当你要处理多维数组的时候。比如将多维数组变成一维数组这样一个看似简单的事件。现在 ES2019 为数组提供的 flat()
和 flatMap()
方法可以让这个问题变得简单。
flat() 方法
第一个是 flat()
,中文可以理解为展开或扁平化的意思。它的作用是把多维数组扁平化为一维数组。默认情况下,flat()
只会展开第一层。如果你需要扁平化更多的层数或深度,你可以指定一个层数或深度值,作为参数传递。如果你不确定多少层,你也可以使用 Infinity
,表示有多少层展开多少展。
// 创建一个数组:
const myArray = ['JavaScript', ['C', 'C++', ['Assembly', ['Bytecode']]]]
// 展开数组第一层
let myFlatArray = myArray.flat(1)
console.log(myFlatArray)
// Output:
// [ 'JavaScript', 'C', 'C++', [ 'Assembly', [ 'Bytecode' ] ] ]
// 有多少层展开多少层
let myInfiniteFlatArray = myArray.flat(Infinity)
console.log(myInfiniteFlatArray)
// Output:
// [ 'JavaScript', 'C', 'C++', 'Assembly', 'Bytecode' ]
flatMap() 方法
除了 flat()
方法外,还有 flatMap()
方法。你可以把这个方法看作是 flat()
的高级版本。不同的是,flatMap()
方法结合了 flat()
和 map()
方法。当你扁平化一个数组时,你可以调用一个回调函数。这允许你在扁平化的过程中对原数组内部的单个元素进行处理。当你想扁平化一个数组,但同时又想修改内容时,这就很方便了。
// 创建一个数组:
const myArray = ['One word', 'Two words', 'Three words']
// 将数组中的字符串使用空格分隔
// 注意:这会创建一个二维数组
const myMappedWordArray = myArray.map((str) => str.split(' '))
console.log(myMappedWordArray)
// Output:
// [ [ 'One', 'word' ], [ 'Two', 'words' ], [ 'Three', 'words' ] ]
// flatMap() 示例
const myArray = ['One word', 'Two words', 'Three words']
// 将数组中的字符串使用空格分隔
const myFlatWordArray = myArray.flatMap((str) => str.split(' '))
console.log(myFlatWordArray)
// Output:
// [ 'One', 'word', 'Two', 'words', 'Three', 'words' ]
Object.fromEntries() 方法
当你需要将一些对象转换为数组时,你可以用 entries()
方法来实现,但反过来将对象的数组合并为单个对象,在 ES2019 之前还没有一个现成的方法。ES2019 提供了 fromEntries()
方法。这个方法的作用很简单。它接受一个键值对的迭代,如数组或Map
。然后,它将其转换为一个对象。
// 将数组转换为对象:
const myArray = [
['name', 'Joe'],
['age', 33],
['favoriteLanguage', 'JavaScript'],
]
const myObj = Object.fromEntries(myArray)
console.log(myObj)
// Output:
// {
// name: 'Joe',
// age: 33,
// favoriteLanguage: 'JavaScript'
// }
// 将 Map 转换为对象:
const myMap = new Map([
['name', 'Spike'],
['species', 'dog'],
['age', 3],
])
const myObj = Object.fromEntries(myMap)
console.log(myObj)
// Output:
// {
// name: 'Spike',
// species: 'dog',
// age: 3
// }
catch 的参数变成可选
以前,当你使用 try...catch 时,你必须把异常作为一个参数传递给 catch,即使你没有使用这个参数。ES2019 把这个参数变成可选项。如果你不想使用异常,你可以使用不带参数的 catch 块。
// ES2019 之前:
try {
// Do something.
} catch (e) {
// 没有用到异常参数 e
// 但该参数不能省略
}
// ES2019:
try {
// Do something.
} catch {
// 没有用到异常参数,可以省略
}
小结
以上五个特性是我觉得比较有用的。除了这五个特性,ES2019 标准还增加了其它的特性或改进,本文没有全部列举出来,如果感兴趣可以查阅官方文档。
快速了解 JavaScript ES2019 的五个新增特性的更多相关文章
- 探究JavaScript中的五种事件处理程序
探究JavaScript中的五种事件处理程序 我们知道JavaScript与HTML之间的交互是通过事件实现的.事件最早是在IE3和Netscape Navigator 2中出现的,当时是作为分担服务 ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)
RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本 新增企业通(内部简易聊天工具) RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用 ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增岗位管理-WinForm部分
RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本 新增岗位管理-WinForm部分 岗位(职位)管理模块主要是针对组织机构的岗位(职位)进行管理,包括:增加.修改. ...
- js快速打印一个五分制(五颗星)的评分情况
1.函数 下面这个函数实现了在html页面中快速打印一个五分制(五颗星)的评分情况: function getRating(rating) { if(rating > 5 || rating & ...
- Javascript多线程引擎(五)
Javascript多线程引擎(五)之异常处理 C语言没有提供一个像Java一样的异常处理机制, 这就带来了一个问题, 对于一个子函数中发生异常后, 需要在父函数调用子函数的位置进行Check, 如果 ...
- .NET快速信息化系统开发框架 V3.2->Web版本新增“文件管理中心”集上传、下载、文件共享等一身,非常实用的功能
文件中心是3.2版本开始新增的一个非常实用功能,可以归档自己平时所需要的文件,也可以把文件分享给别人,更像一个知识中心.文件中心主界面如下图所示,左侧“我的网盘”展示了用户对文件的分类,只能自己看到, ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->WinForm版本新增新的角色授权管理界面效率更高、更规范
角色授权管理模块主要是对角色的相应权限进行集中设置.在角色权限管理模块中,管理员可以添加或移除指定角色所包含的用户.可以分配或授予指定角色的模块(菜单)的访问权限.可以收回或分配指定角色的操作(功能) ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本新增新的角色授权管理界面效率更高、更规范
角色授权管理模块主要是对角色的相应权限进行集中设置.在角色权限管理模块中,管理员可以添加或移除指定角色所包含的用户.可以分配或授予指定角色的模块(菜单)的访问权限.可以收回或分配指定角色的操作(功能) ...
- Javascript数组系列五之增删改和强大的 splice()
今天是我们介绍数组系列文章的第五篇,也是我们数组系列的最后一篇文章,只是数据系列的结束,所以大家不用担心,我们会持续的更新干货文章. 生命不息,更新不止! 今天我们就不那么多废话了,直接干货开始. 我 ...
随机推荐
- ESLint & jsx-quotes & quotes
ESLint & jsx-quotes & quotes bug { "jsx-quotes": [ "error", "prefer ...
- js 创建XML
// 创建xml数据 let doc = document.implementation.createDocument('', 'root', null); // 创建一个文档 let root =d ...
- 「NGK每日快讯」2021.1.8日NGK第66期官方快讯!
- centos7下载和安装 通过xshell连接,有手就行,小白教程
下载步骤: https://mirrors.aliyun.com/centos/?spm=a2c6h.13651104.0.0.3c3712b2NaHUdY 点击下载或者复制链接到迅雷下载 下载好以后 ...
- 记一个关于std::unordered_map并发访问的BUG
前言 刷题刷得头疼,水篇blog.这个BUG是我大约一个月前,在做15445实现lock_manager的时候遇到的一个很恶劣但很愚蠢的BUG,排查 + 摸鱼大概花了我三天的时间,根本原因是我在使用s ...
- 痞子衡嵌入式:系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败问题. 我们知道,i.MXRT1xxx家族早期型号(RT1050/ ...
- Django 报错 Reverse for 'content' not found. 'content' is not a valid view function or pattern name.
Django 报错 Reverse for 'content' not found. 'content' is not a valid view function or pattern name. 我 ...
- 剑指 Offer 53 - I. 在排序数组中查找数字 I + 二分法
剑指 Offer 53 - I. 在排序数组中查找数字 I Offer_53_1 题目描述 方法一:使用HashMap package com.walegarrett.offer; /** * @Au ...
- Celery:小试牛刀
Celery是如何工作的? Celery 由于 其分布式体系结构,在某种程度上可能难以理解.下图是典型Django-Celery设置的高级示意图(FROM O'REILLY): 当请求到达时,您可以在 ...
- idea添加本地文件约束(DTD)
当我们做 xml 文件配置的时候,需要对其进行约束的配置 例如: hibernate 如果我们在联网的情况下是可以不添加配置文件约束的,红框内的 URL 会自动帮我们从网络上加载约束文件,但是没有网络 ...