【ES】338- ECMAScirpt 2019 新特性汇总
点击上方“前端自习课”关注,学习起来~
最近在做的一个活动,大家都可以参与:
最近 ECMAScript2019,最新提案完成:tc39 Finished Proposals,我这里也是按照官方介绍的顺序进行整理,如有疑问,可以查看官方介绍啦~
另外之前也整理了 【汇总】59篇原创系列汇总(可以点击查看),也包含《ES6/ES7/ES8/ES9系列》。
1. 可选的 catch 绑定
1.1 介绍
在 ECMAScript2019 最新提案中,支持我们在使用 trycatch
错误异常处理时,选择性的给 catch
传入参数。
即我们可以不传入 catch
参数。
正常使用 trycatch
:
try {
// todo
} catch (err){
console.log('err:',err)
}
在 ES10 中可以这么使用:
try {
// todo
} catch {
// todo
}
1.2 使用场景
当我们不需要对 catch
返回的错误信息进行处理时,比如:我们对于一些数据处理,经常会出现格式报错,但是我们并不关心这个错误,我们只需要继续处理,或重新请求数据等。
这种情况,我们就可以使用这个新特性,当然,还是需要根据实际情况考虑。
2. JSON.superset
2.1 介绍
来源背景:
由于在 ES2019 之前不支持转义行分隔符 ( \u2028
) 和段落分隔符 ( \u2029
) 字符,并且在解析过程中会报错: SyntaxError:Invalidorunexpected token
。
const LS = "";
const PS = eval("'\u2029'");// SyntaxError: Invalid or unexpected token
解决方案:
JSON 语法由* ECMA-404* 定义并由 RFC 7159 永久修复,允许行分隔符 ( \u2028
) 和段落分隔符 ( \u2029
) 字符,直接出现在字符串中。
2.2 使用
在 ES10 中,我们就可以直接使用 eval("'\u2029'");
而不会再提示错误。
3. Symbol.prototype.description
3.1 介绍
在 ES6 中引入 Symbol 这个基本数据类型,可以实现一些数据内省等高级功能。
这次 ES10 中,为 Symbol 类型增加 Symbol.prototype.description
的一个访问器属性,用来获取 Symbol
类型数据的描述信息(description)。
3.2 使用
MDN 上的案例介绍:
console.log(Symbol('pingan8787').description);
// expected output: "pingan8787"
console.log(Symbol.iterator.description);
// expected output: "Symbol.iterator"
console.log(Symbol.for('leo').description);
// expected output: "leo"
console.log(Symbol('pingan8787').description + ' and leo!');
// expected output: "pingan8787 and leo!"
另外我们也可以这么使用:
let pingan = Symbol('pingan8787').description;
console.log(pingan === 'pingan8787'); // true
4. Function.prototype.toString
4.1 介绍
在 ES10 之前,我们对一个函数调用 toString()
方法,返回的结果中会将注释信息去除。
在 ES10 之后,函数再调用 toString()
方法,将准确返回原有内容,包括空格和注释等:
let pingan8787 = function(){
// do something
console.log('leo')
}
pingan8787.toString();
/**
"function(){
// do something
console.log('leo')
}"
*/
5. Object.fromEntries
5.1 介绍
Object.fromEntries
是 ES10 中新的静态方法,用于将键值对列表转换为对象。
Object.fromEntries()
方法接收一个键值对的列表参数,并返回一个带有这些键值对的新对象。
这个迭代参数应该是一个能够实现 @iterator
方法的的对象,返回一个迭代器对象。它生成一个具有两个元素的类数组的对象,第一个元素是将用作属性键的值,第二个元素是与该属性键关联的值。
Object.fromEntries()
是 Object.entries
的反转。
5.2 使用
Object.entries
和 Object.fromEntries()
互转
let leo = { name: 'pingan8787', age: 10};
let arr = Object.entries(leo);
console.log(arr);// [["name", "pingan8787"],["age", 10]]
let obj = Object.fromEntries(arr);
console.log(obj);// {name: "pingan8787", age: 10}
Map
转化为 Object
const map = new Map([ ['name', 'pingan8787'], ['age', 10] ]);
const obj = Object.fromEntries(map);
console.log(obj); // {name: "pingan8787", age: 10}
Array
转化为 Object
const arr = [ ['name', 'pingan8787'], ['age', 10] ];
const obj = Object.fromEntries(arr);
console.log(obj); // {name: "pingan8787", age: 10}
6. 更友好的 JSON.stringify
6.1 介绍
更友好的 JSON.stringify
,对于一些超出范围的 Unicode 字符串,为其输出转义序列,使其成为有效 Unicode 字符串。
6.2 使用
// Non-BMP characters still serialize to surrogate pairs.
JSON.stringify('?')
// → '"?"'
JSON.stringify('\uD834\uDF06')
// → '"?"'
// Unpaired surrogate code units will serialize to escape sequences.
JSON.stringify('\uDF06\uD834')
// → '"\\udf06\\ud834"'
JSON.stringify('\uDEAD')
// → '"\\udead"'
7. String.prototype.{trimStart,trimEnd}
7.1 String.prototype.trimStart
trimStart()
方法从字符串的开头删除空格,返回一个新字符串,表示从其开头(左端)剥离空格的调用字符串,不会直接修改原字符串本身。
trimLeft()
是此方法的别名。
let pingan8787 = ' Hello pingan8787! ';
console.log(pingan8787); // " Hello pingan8787! ";
console.log(pingan8787.length); // 23;
console.log(pingan8787.trimStart()); // "Hello pingan8787! ";
console.log(pingan8787.trimStart().length); // 20;
7.2 String.prototype.trimEnd
trimEnd()
方法从一个字符串的右端移除空白字符,返回一个新字符串,表示从其(右)端剥去空白的调用字符串,不会直接修改原字符串本身。
trimRight()
是此方法的别名。
let pingan8787 = ' Hello pingan8787! ';
console.log(pingan8787); // " Hello pingan8787! ";
console.log(pingan8787.length); // 23;
console.log(pingan8787.trimEnd()); // " Hello pingan8787!";
console.log(pingan8787.trimEnd().length); // 20;
8. Array.prototype.{flat,flatMap}
在 ES10 之前,我们要将一个数组打平,由于官方没有对应 API,我们可能需要 lodash 活着手写循环去操作。
8.1 Array.prototype.flat
在 ES10 中,官方新增一个 Array.prototype.flat
方法,将数组第一层数据打平,也仅限第一层。如果我们需要将多层递归,则需要显式传入参数:
[1,2,3,[1,2,[3, [4]]]].flat(2);
// [1, 2, 3, 1, 2, 3, [4]]
8.2 Array.prototype.flatMap
在 ES10 中,官方还增加了 Array.prototype.flatMap
方法,其实就是 flat
和 map
一起组合操作:
[1,3,5].map(x => [x * x]); // [[1],[9],[25]]
[1,3,5].flatMap(x => [x * x]); // [1,9,25]
参考文章:
1.ES2019 新特性简介:
https://juejin.im/post/5c52a645f265da2ddc3c4bd8
2.ES2019 新特性简介:
http://www.imooc.com/article/290813
▼
原创系列推荐
▼
7. 59篇原创系列汇总
点这,与大家一起分享本文吧
【ES】338- ECMAScirpt 2019 新特性汇总的更多相关文章
- 【转】Spark-Sql版本升级对应的新特性汇总
Spark-Sql版本升级对应的新特性汇总 SparkSQL的前身是Shark.由于Shark自身的不完善,2014年6月1日Reynold Xin宣布:停止对Shark的开发.SparkSQL抛弃原 ...
- iOS8 针对开发者所拥有的新特性汇总如下
iOS8 针对开发者所拥有的新特性汇总如下 1.支持第三方键盘 2.自带网页翻译功能(即在线翻译) 3.指纹识别功能开放:第三方软件可以调用 4.Safari浏览器可直接添加新的插件. 5.可以把一个 ...
- 21、前端知识点--html5和css3新特性汇总
跳转到该链接 新特性汇总版: https://www.cnblogs.com/donve/p/10697745.html HTML5和CSS3的新特性(浓缩好记版) https://blog.csdn ...
- VisualStudio 2019 新特性
很多小伙伴都好奇 VisualStudio 2019 有哪些功能,下面让我介绍一些好玩的特性 在安装完成之后会看到创新的欢迎界面,这个欢迎界面支持输入关键字搜项目,同时支持选择语言平台 很多小伙伴都说 ...
- 【CuteJavaScript】ES2019 新特性汇总
最近 ECMAScript2019,最新提案完成:tc39 Finished Proposals,我这里也是按照官方介绍的顺序进行整理,如有疑问,可以查看官方介绍啦~ 另外之前也整理了 <ES6 ...
- Swift3新特性汇总
之前 Apple 在 WWDC 上已将 Swift 3 整合进了 Xcode 8 beta 中,而本月苹果发布了 Swift 3 的正式版.这也是自 2015 年底Apple开源Swift之后,首个发 ...
- iOS6、7、8、9新特性汇总和适配说明
iOS6新特性 一.关于内存警告 ios6中废除了viewDidUnload,viewWillUnload这两个系统回调,收到内存警告时在didReceiveMemoryWarning中进行相关的处理 ...
- H5新特性汇总
H5新特性: 新增选择器 document.querySelector.document.querySelectorAll 拖拽释放(Drag and drop) API 媒体播放的 video 和 ...
- ES 2015/6 新特性汇总
ES 2015/6 新特性汇总 箭头函数 箭头函数,通过 => 语法实现的函数简写形式,C#/JAVA8/CoffeeScript 中都有类似语法.与函数不同,箭头函数与其执行下文环境共享同一个 ...
随机推荐
- (二十九)golang--map
map:是key-value数据结构,又称为字段或者关联数组,类似其它编程语言的集合: 基本语法:var 名称 map[键类型]值类型 key的类型可以是:bool.数字.string.指针.管道,还 ...
- HTML建立超链接
链接是HTML文档的最基本特征之一.超文本链接英文名为hyperlink,它能够让浏览器在各个独立的页面之间方便地跳转.超链接有外部链接.电子邮件链接.锚点链接等. a标签 网页中<a& ...
- 理解Redis的反应堆模式
1. Redis的网络模型 Redis基于Reactor模式(反应堆模式)开发了自己的网络模型,形成了一个完备的基于IO复用的事件驱动服务器,但是不由得浮现几个问题: 为什么要使用Reactor模式呢 ...
- 【论文阅读】CornerNet: Detecting Objects as Paired Keypoints
以下内容将介绍ECCV2018的一篇目标检测的文章<CornerNet: Detecting Objects as Paired Keypoints>.该文章讲述了一个老子就是不用anch ...
- java基础总结(1)--深入理解基本数据类型
深入理解java数据类型 java是一种强类型语言,这就意味着必须为每一个声明变量声明一种类型.在java中,一共有8种数据类型,其中4种整型,2种浮点类型,1种字符类型和一种表示真值的boolean ...
- Rocket框架多文件上传,介绍rocket_upload 使用
不知道你的体会是什么,我从C切换到Rust以来,最大的感受并不是语法方面的---那些方面已经有足够多人抱怨而又享受着了.我最大的感受是终于把Web编程工具,同系统编程工具统一了起来. C/C++其实也 ...
- OSI案例详解+ARP+DNS
案例,淘宝买东西 DNS 域名的作用其实就是相对ip地址来说更好记忆和识别,DNS就是根据域名解析出ip 一次请求,DNS解析的过程 1.在浏览器输入一个域名,操作系统首先会检查自己的本地hosts文 ...
- 2019-2020-8 20199317 《Linux内核原理与分析》 第八周作业
第7章 可执行程序工作原理 1 ELF目标文件格式 1.1 ELF概述 “目标文件”,是指编译器生成的文件.“目标”指目标平台目标文件一般也叫作ABI(Application Bi ...
- PHP数组总汇
数组,顾名思义,本质上就是一系列数据的组合.在这个组合中,每个数据都是独立的,可以对每个单独的数据进行分配和读取.PHP对数据的操作能力非常强大,尤其是PHP为程序开发人员提供了大量方便.易懂的数组操 ...
- 关于Python中的错误与异常,你是否了解的够仔细?
每次版本结束都描述这着同样的错误,相似的问题,但始终没见解决.所以今天,我就来总结下Python的错误与异常! 异常与错误 错误 语法错误 可以通过IDE或者解释器给出提示的错误 opentxt('a ...