zoukankan      html  css  js  c++  java
  • 【ES】338- ECMAScirpt 2019 新特性汇总

    640?wx_fmt=png

    点击上方“前端自习课”关注,学习起来~

    640?wx_fmt=png

    最近在做的一个活动,大家都可以参与:

    最近 ECMAScript2019,最新提案完成:tc39 Finished Proposals,我这里也是按照官方介绍的顺序进行整理,如有疑问,可以查看官方介绍啦~

    另外之前也整理了 【汇总】59篇原创系列汇总(可以点击查看),也包含《ES6/ES7/ES8/ES9系列》

    640?wx_fmt=png

    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('uD834uDF06')	
    // → '"?"'	
    // Unpaired surrogate code units will serialize to escape sequences.	
    JSON.stringify('uDF06uD834')	
    // → '"\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

    原创系列推荐

    1. JavaScript 重温系列(22篇全)

    2. ECMAScript 重温系列(10篇全)

    3. JavaScript设计模式 重温系列(9篇全)

    4. 正则 / 框架 / 算法等 重温系列(16篇全)

    5. Webpack4 入门手册(共 18 章)(上)

    6. Webpack4 入门手册(共 18 章)(下)

    7. 59篇原创系列汇总

    640?wx_fmt=png

    640?wx_fmt=png

    点这,与大家一起分享本文吧

    个人博客:http://www.pingan8787.com 微信公众号【前端自习课】和千万网友一起,每日清晨,享受一篇前端优秀文章。 目前已连续推送文章 600+ 天,愿每个人的初心都能一直坚持下去!
  • 相关阅读:
    CodeForces
    Vs2012在Linux开发中的应用(6):改写Makefile项目的Build过程
    Mac 上VitrualBox安装CentOS6.5 调整root分区的大小
    iOS面试常见题
    C语言入门(2)——安装VS2013开发环境并编写第一个C语言程序
    大数据
    HDU 5188 背包
    Android 上的 制表符(tab) —— 一个奇妙的字符 (cocos2dx crash)
    mysql读写分离(主从复制)实现
    高仿webqq做的一个webos桌面效果和web聊天工具,桌面效果完好,功能强大
  • 原文地址:https://www.cnblogs.com/pingan8787/p/11838100.html
Copyright © 2011-2022 走看看