JavaScript ES2019中的8个新特性详解


Posted in Javascript onFebruary 20, 2019

前言

JavaScript 不断改进和添加更多功能。TC39 已经完成并批准了 ES2019 的这 8 个功能,它有 4 个阶段,这些阶段是:

  • Stage 0: Strawman
  • Stage 1: Proposals
  • Stage 2: Drafts
  • Stage 3: Candidates
  • Stage 4: Finished/Approved

以下链接可以查看Stage 0,Stage 1 ? 3 和Final Stage

可选的 Catch 绑定

能够在不使用 catch 绑定的地方选择性地删除它

try {
 // trying to use a new ES2019 feature
 // which may not be implemented in other browsers
} catch (unused) {
 // revert back to old way
}

现在可以删除未使用的绑定

try {
 ...
} catch {
 ...
}

JSON 超集

此提议的动机是 JSON 字符串可以包含未转义的 U + 2028 LINE SEPARATOR 和 U + 2029 PARAGRAPH SEPARATOR 字符,而 ECMAScript 字符串则不能。在 ES2019 之前,它会产生错误SyntaxError: Invalid or unexpected token

const LS = eval('"\u2028"');
const PS = eval("'\u2029'");

符号说明

在 ES2015 中引入符号,具有非常独特的功能。在 ES2019 中,它现在可以提供给定的描述。其目的是避免间接获得所提供的描述Symbol.prototype.toString

const mySymbol = Symbol("myDescription");

console.log(mySymbol); // Symbol(myDescription)

console.log(mySymbol.toString()); // Symbol(myDescription)

console.log(mySymbol.description); // myDescription

Function.prototype.toString - 修订版

我们之前已经在函数原型中使用了toString方法,但是在 ES2019 中它已被修改并包含函数内的注释,请注意它在Arrow Functions上不起作用。

function /* comment */ foo /* another comment */() {}

// Before
console.log(foo.toString()); // function foo(){}

// Now ES2019
console.log(foo.toString()); // function /* comment */ foo /* another comment */ (){}

// Arrow Syntax
const bar /* comment */ = /* another comment */ () => {};

console.log(bar.toString()); // () => {}

Object.fromEntries

它是 Object.entries 的反向方法,它也是克隆对象的方法之一

const obj = {
 prop1: 1,
 prop2: 2
};

const entries = Object.entries(obj);

console.log(entries); // [ [ 'prop1', 1 ], [ 'prop2', 2 ] ]

const fromEntries = Object.fromEntries(entries);

console.log(fromEntries); // Object { prop1: 1, prop2: 2 }

console.log(obj === fromEntries); // false

注意:任何嵌入式对象/数组都只是通过引用复制。

格式良好的 JSON.stringify

这也是由同一个人提出的,并且与 JSON 超集特征有关 。ES2019 不是将未配对的代理代码点作为单个 UTF-16 代码单元返回,而是用 JSON 转义序列表示它们

// Before
console.log(JSON.stringify("\uD800")); // "�"

// Now ES2019
console.log(JSON.stringify("\uD800")); // "\ud800"

String.prototype trimStart 和 trimEnd

我们已经在 String 原型中使用了trim方法,它删除了字符串开头和结尾之间的空格。但是现在开始介绍 ES2019 的 trimStart和trimEnd

// Trim
const name = "  Codedam ";
console.log(name.trim()); // "Codedam"

// Trim Start
const description = "  Unlocks Secret Codes ";
console.log(description.trimStart()); // "Unlocks Secret Codes "

// Trim End
const category = " JavaScript ";
console.log(category.trimEnd()); // " JavaScript"

Array.prototype flat 和 flatMap

flat方法创建一个新数组,所有子数组元素以递归方式连接到指定的深度。 默认情况下,深度为 1,使数组上第一层嵌套数组变平。

const arr = [1, 2, [3, 4, [5, 6]]];
arr.flat(); // [1, 2, 3, 4, [5, 6]]
arr.flat(2); // [1, 2, 3, 4, 5, 6]

// You can use Infinity to flatten all the nested arrays no matter how deep the array is

const arrExtreme = [1, [2, [3, [4, [5, 6, 7, [8, 9]]]]]];
arrExtreme.flat(Infinity); // [1, 2, 3, 4, 5, 6, 7, 8, 9]

flatMap 类似于 flat 并且与 map 相关,其中它映射数组然后将其展平

const arr = ["Codedam", "is Awsome", "!"];

const mapResult = arr.map(item => item.split(" "));
console.log(mapResult); // [ [ 'Codedam' ], [ 'is', 'Awsome' ], [ '!' ] ]

const flatMapResult = arr.flatMap(chunk => chunk.split(" "));
console.log(flatMapResult); // ['Codedam', 'is', 'Awsome', '!'];

其他

强调一下现在 Stage 3 中的一些有用的即将推出的功能。

  • globalThis
  • BigInt
  • import()
  • Legacy RegEx
  • Private instance methods and accessors
  • String.prototype.matchAll

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
Dec 06 Javascript
最简单的js图片切换效果实现代码
Sep 24 Javascript
jQuery中next方法用法实例
Apr 24 Javascript
JavaScript电子时钟倒计时
Jan 09 Javascript
浅谈JavaScript for循环 闭包
Jun 22 Javascript
jQuery实现可兼容IE6的滚动监听功能
Sep 20 jQuery
深入了解js原型模式
May 30 Javascript
bootstrap table实现iview固定列的效果实例代码详解
Sep 30 Javascript
vue模块移动组件的实现示例
May 20 Javascript
探索浏览器页面关闭window.close()的使用详解
Aug 21 Javascript
JS如何生成动态列表
Sep 22 Javascript
js实现碰撞检测
Jan 29 Javascript
echarts实现词云自定义形状的示例代码
Feb 20 #Javascript
JS拖拽排序插件Sortable.js用法实例分析
Feb 20 #Javascript
详解webpack 最简打包结果分析
Feb 20 #Javascript
jQuery表单元素过滤选择器用法实例分析
Feb 20 #jQuery
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
Feb 20 #jQuery
小程序红包雨的实现示例
Feb 19 #Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
Feb 19 #Javascript
You might like
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
浅析PHP中的UNICODE 编码与解码
2013/06/29 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
php 可变函数使用小结
2018/06/12 PHP
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
javascript正则匹配汉字、数字、字母、下划线
2014/04/10 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
jQuery实现内容定时切换效果完整实例
2016/04/06 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
20行JS代码实现粘贴板复制功能
2018/02/06 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
python格式化字符串实例总结
2014/09/28 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
Python爬虫与反爬虫大战
2020/07/30 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
金宝贝童装官网:Gymboree
2016/08/31 全球购物
汽车技术服务英文求职信范文
2014/01/02 职场文书
车贷收入证明范本
2014/01/09 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
安全环保演讲稿
2014/08/28 职场文书
宝葫芦的秘密观后感
2015/06/11 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers
MySQL数据库之存储过程 procedure
2022/06/16 MySQL