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 相关文章推荐
一个加密JavaScript的开源工具PACKER2.0.2
Nov 04 Javascript
选择TreeView控件的树状数据节点的JS方法(jquery)
Feb 06 Javascript
javascript抽象工厂模式详细说明
Dec 16 Javascript
使用js画图之饼图
Jan 12 Javascript
基于jquery实现的自动补全功能
Mar 12 Javascript
jQuery过滤选择器经典应用
Aug 18 Javascript
微信小程序 教程之条件渲染
Oct 18 Javascript
Vue.js系列之项目搭建(1)
Jan 03 Javascript
浅谈在react中如何实现扫码枪输入
Jul 04 Javascript
Angular ElementRef简介及其使用
Oct 01 Javascript
微信小程序 行的删除和增加操作实现详解
Sep 29 Javascript
JavaScript 如何计算文本的行数的实现
Sep 14 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
初识php MVC
2014/09/10 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
javascript打印输出json实例
2013/11/11 Javascript
jquery日历控件实现方法分享
2014/03/07 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
JS代码实现电脑配置检测功能
2018/03/21 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
python中from module import * 的一个坑
2014/07/20 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
浅析Python数据处理
2018/05/02 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
Sanic框架路由用法实例分析
2018/07/16 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
database面试题
2013/03/28 面试题
中文专业毕业生自荐信
2013/10/28 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
入党积极分子群众意见
2015/06/01 职场文书
装修公司管理制度
2015/08/05 职场文书
Python 中 Shutil 模块详情
2021/11/11 Python