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 相关文章推荐
基于jquery的放大镜效果
May 30 Javascript
裁剪字符串trim()自定义改进版
Apr 10 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
Dec 26 Javascript
JS循环遍历JSON数据的方法
Jul 08 Javascript
JavaScript数组随机排列实现随机洗牌功能
Mar 19 Javascript
vue轮播图插件vue-awesome-swiper
Nov 27 Javascript
微信小程序之分享页面如何返回首页的示例
Mar 28 Javascript
vue.js计算属性computed用法实例分析
Jul 06 Javascript
Vue 监听列表item渲染事件方法
Sep 06 Javascript
vue请求数据的三种方式
Mar 04 Javascript
JS实现随机点名器
Apr 12 Javascript
js前端对于大量数据的展示方式及处理方法
Dec 02 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 分页类(模仿google)-面试题目解答
2009/09/13 PHP
php常用的工具开发整理
2019/09/26 PHP
laravel5表单唯一验证的实例代码
2019/09/30 PHP
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
SinaEditor使用方法详解
2013/12/28 Javascript
jquery的each方法使用示例分享
2014/03/25 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
2019/05/31 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
Python远程视频监控程序的实例代码
2019/05/05 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
德国家具折扣店:POCO
2020/02/28 全球购物
初中生期末考试的自我评价
2013/12/17 职场文书
销售经理工作职责
2014/02/03 职场文书
寄语是什么意思
2014/04/10 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
优秀员工事迹材料
2014/12/20 职场文书
房屋维修申请报告
2015/05/18 职场文书
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript