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 相关文章推荐
获取焦点时,利用js定时器设定时间执行动作
Apr 02 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
Dec 12 Javascript
一个简单的动态加载js和css的jquery代码
Sep 01 Javascript
如何利用JQuery实现从底部回到顶部的功能
Dec 27 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
Jul 22 jQuery
微信小程序实现全国机场索引列表
Jan 31 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
Apr 12 jQuery
微信小程序实现人脸识别
May 25 Javascript
vue.js删除列表中的一行
Jun 30 Javascript
js中实例与对象的区别讲解
Jan 21 Javascript
Node 搭建一个静态资源服务器的实现
May 20 Javascript
简单了解Vue + ElementUI后台管理模板
Apr 07 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生成zip压缩文件的方法详解
2013/06/09 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
php session_decode函数用法讲解
2019/05/26 PHP
JavaScript类和继承 constructor属性
2010/03/04 Javascript
简约JS日历控件 实例代码
2013/07/12 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
jQuery插件jRumble实现网页元素抖动
2015/06/05 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
jQuery自定义数值抽奖活动代码
2016/06/11 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
vue组件 keep-alive 和 transition 使用详解
2019/10/11 Javascript
vue实现Input输入框模糊查询方法
2021/01/29 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
2020/02/24 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
2020/11/04 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
Python实现模拟浏览器请求及会话保持操作示例
2018/07/30 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
Django文件上传与下载(FileFlid)
2019/10/06 Python
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
中专生自我鉴定书范文
2013/12/28 职场文书
淘宝客服自我总结鉴定
2014/01/25 职场文书
称象教学反思
2014/02/03 职场文书
2015年护理工作总结范文
2015/04/03 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android