1.Array.prototype.flat()

Array.prototype.flat()用于将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新数组,对原数据没有影响。flat(depth),flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,depth默认为1。

const arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]const arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]const arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]// 如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。
const arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr4.flat(Infinity);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]// 如果原数组有空位,flat()方法会跳过空位。
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]

2.Array.prototype.flatMap()

flatMap() 方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。
它与 map 连着深度值为1的 flat 几乎相同,但 flatMap 通常在合并成一种方法的效率稍微高一些。

[1, 2, 3, 4].flatMap((x) => [x * 2])
// [2, 4, 6, 8]// 相当于先map再flat()
[1, 2, 3, 4].map(x => [x * 2]).flat()
// [2, 4, 6, 8]

3.String.prototype.trimStart()

trimStart() 方法从字符串的开头删除空格,trimLeft()是此方法的别名。
返回一个新字符串,表示从其开头(左端)除去空格的调用字符串。

var str = "   foo  ";
console.log(str.length); // 8
str = str.trimStart()    // 等同于 str = str.trimLeft();
console.log(str.length); // 5
console.log(str);        // "foo  "

4.String.prototype.trimEnd()

trimEnd() 方法从一个字符串的末端移除空白字符。trimRight() 是这个方法的别名。
返回一个新字符串,表示从调用字串的末(右)端除去空白。

var str = "   foo  ";
console.log(str.length); // 8
str = str.trimRight();  // 或写成str = str.trimEnd();
console.log(str.length); // 6
console.log(str);       // '   foo'

5.String.prototype.matchAll()

matchAll() 方法返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器。
在 matchAll 出现之前,通过在循环中调用 regexp.exec() 或 string.match()来获取所有匹配项信息(其中regexp 必需使用 /g 标志)

before

// 方法1
function collectGroup1 (regExp, str) {const matches = []while (true) {const match = regExp.exec(str)// 其中regexp 必需使用 /g 标志,否则每次都重新从第一位开始,容易陷入死循环if (match === null) break// Add capture of group 1 to `matches`matches.push(match[1])}return matches
}collectGroup2(/"([^"]*)"/g, `"foo" and "bar" and "baz"`)
// [ 'foo', 'bar', 'baz' ]// 方法2
// str.replace()除了支持字符串还支持函数
function collectGroup1 (regExp, str) {const matches = []function replacementFunc (all, first) {matches.push(first)}str.replace(regExp, replacementFunc)return matches
}collectGroup2(/"([^"]*)"/ug, `"foo" and "bar" and "baz"`)
// ["foo", "bar", "baz"]
// 如果没有 flag /g, .exec() 只返回第一个匹配
let re = /[abc]/
re.exec('abc')
// ["a", index: 0, input: "abc", groups: undefined]
re.exec('abc')
// ["a", index: 0, input: "abc", groups: undefined]

after

有了matchAll之后

function collectGroup3 (regExp, str) {let results = []for (const match of str.matchAll(regExp)) {results.push(match[1])}return results
}
collectGroup3(/"([^"]*)"/g, `"foo" and "bar" and "baz"`)
// ["foo", "bar", "baz"]

6.Object.fromEntries()

Object.fromEntries() 方法把键值对列表转换为一个对象。

// 例1:
Object.fromEntries([['foo', 1], ['bar', 2]])
// {foo: 1, bar: 2}// 例2
const entries = new Map([['foo', 'bar'],['baz', 42]
]);
const obj = Object.fromEntries(entries);
console.log(obj);
// { foo: "bar", baz: 42 }

更普遍的使用场景是和Entries搭配用:
先使用Object.entries将对象转为数组,使用数组方法处理完数据后,再使用Object.fromEntries转换为对象。

// 仅保留对象中属性名长度等于3的部分,并将其属性值变为原来的2倍
let obj = { abc: 1, def: 2, ghij: 3 }
let res = Object.fromEntries(Object.entries(obj).filter(([ key, val ]) => key.length === 3).map(([ key, val ]) => [ key, val * 2 ])
)
console.log(res)
// res is { 'abc': 2, 'def': 4 }

7.Symbol.prototype.description

description 是一个只读属性,它会返回 Symbol 对象的可选描述的字符串。

const name = Symbol('My name is axuebin')
console.log(name.description) // My name is axuebinconsole.log(Symbol('desc').description);
// "desc"console.log(Symbol.iterator.description);
// "Symbol.iterator"

8.Function.prototype.toString()

toString() 方法返回一个表示当前函数源代码的字符串

function sum(a, b) {return a + b;
}console.log(sum.toString());// "function sum(a, b) {//   return a + b;
// }"

9.try…catch

ES2019之后,可省略 catch 的 err 参数

// before
try {// ...
} catch (err) {// ...
}// after:现在可省略err这个参数
try {// ...
} catch {// ...
}

10.BigInt

ES2019 增加了一个数据类型:BigInt,用于处理超过 2^53 - 1的数字。这原本是 Javascript中可以用 Number 表示的最大数字。BigInt 可以表示任意大的整数。

在一个整数字面量后面加 n 的方式定义一个 BigInt ,如:10n,或者调用函数BigInt()。

const theBiggestInt = 9007199254740991n;
// 9007199254740991n
const alsoHuge = BigInt(9007199254740991);
// 9007199254740991n
const hugeString = BigInt("9007199254740991");
// 9007199254740991n
const hugeHex = BigInt("0x1fffffffffffff");
// 9007199254740991n
const hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111");
// 9007199254740991n

注意:
不能用于 Math 对象中的方法;
不能和任何 Number 实例混合运算,两者必须转换成同一种类型。
BigInt 与普通整数是两种值,它们之间并不相等。

// BigInt 和 Number 不是严格相等的,但是宽松相等的。
42n === 42 // false
42n == 42 // true

并且在两种类型来回转换时要小心,因为 BigInt 变量在转换成 Number 变量时可能会丢失精度。

BigInt(123) // 123n
BigInt('123') // 123n
BigInt(false) // 0n
BigInt(true) // 1nBoolean(0n) // false
Boolean(1n) // true
Number(1n)  // 1
String(1n)  // "1"
!0n // true
!1n // false

使用 typeof 测试时, BigInt 对象返回 “bigint” :

typeof 1n === 'bigint'; // truetypeof BigInt('1') === 'bigint'; // true

对任何 BigInt 值使用 JSON.stringify() 都会引发 TypeError,因为默认情况下 BigInt 值不会在 JSON 中序列化。但是,如果需要,可以自定义实现BigInt.prototype.toJSON 方法。

ES2019 重点总结相关推荐

  1. pycharm重点插件

    Key Promoter X 重点 如果让我给新手推荐一个 PyCharm 必装插件,那一定是 Key Promoter X . 它就相当于一个快捷键管理大师,它时刻地在: 教导你,当下你的这个操作, ...

  2. 一本读懂BERT(实践篇)重点

    目录 一.什么是BERT? 二.BERT安装 三.预训练模型 四.运行Fine-Tuning 五.数据读取源码阅读 (一) DataProcessor (二) MrpcProcessor 六.分词源码 ...

  3. 协程和任务 异步IO 重点

    20210815 https://mp.weixin.qq.com/s/XeHaWhKztnCOIXb_2GSitQ https://mp.weixin.qq.com/s/lnox3pbpzJ2kWl ...

  4. 从 SGD 到 Adam —— 深度学习优化算法概览 各种优化器 重点

    20210701 https://blog.51cto.com/u_15064630/2571266 [机器学习基础]优化算法详解 详细 https://blog.csdn.net/u01338501 ...

  5. 一文告诉你Adam、AdamW、Amsgrad区别和联系 重点

    **序言:**Adam自2014年出现之后,一直是受人追捧的参数训练神器,但最近越来越多的文章指出:Adam存在很多问题,效果甚至没有简单的SGD + Momentum好.因此,出现了很多改进的版本, ...

  6. pytorch lstm crf 代码理解 重点

    好久没有写博客了,这一次就将最近看的pytorch 教程中的lstm+crf的一些心得与困惑记录下来. 原文 PyTorch Tutorials 参考了很多其他大神的博客,https://blog.c ...

  7. RNN,LSTM,GRU基本原理的个人理解重点

    20210626 循环神经网络_霜叶的博客-CSDN博客 LSTM的理解 - 走看看 重点 深入LSTM结构 首先使用LSTM的当前输入 (x^t)和上一个状态传递下来的 (h^{t-1}) 拼接训练 ...

  8. 会议重点介绍芯片设计中的人工智能

    会议重点介绍芯片设计中的人工智能 Conference highlights AI in chip design, IoT 旧金山-谷歌正在试验机器学习(ML)来执行IC设计中的地点和路线,并取得了很 ...

  9. 2021年大数据常用语言Scala(十六):基础语法学习 列表 List 重点掌握

    目录 列表 List 重点掌握 不可变列表定义 可变列表 列表常用操作 列表 List 重点掌握 列表是scala中最重要的.也是最常用的数据结构.List具备以下性质: 可以保存重复的值 有先后顺序 ...

最新文章

  1. 博士生4篇高分论文参加答辩,却遭评委批评:你写的太多了
  2. CentOS6.4安装nginx1.4
  3. 移动Web开发图片自适应两种常见情况解决方案
  4. Schedule Problem spfa 差分约束
  5. virtual box挂载 共享文件夹
  6. [蓝桥杯2018决赛]换零钞-枚举
  7. css用一张大图片来设置背景的技术真相
  8. Win10笔记本可以搜索到邻居WiFi却搜不到自家的??
  9. 根据文件前四个字节判断文件类型(centos 7)
  10. ServiceStack.Ormlit 使用Insert的时候自增列不会被赋值
  11. TP5.1中的验证类 validate用法
  12. Unity -Shader精讲(一)OpenGL,DirectX,CG选择 着色器选择
  13. 自定义异常 extends Exception
  14. Cadence软件盗版
  15. TOP100summit:【分享实录】京东1小时送达的诞生之路
  16. pythonclass语法_【python类别概念自学】class的语法整理(继承、抽象类别、魔术方法)...
  17. 推荐两个Android模拟器,轻松解决模拟器调试java.lang.UnsatisfiedLinkError: dlopen failed~~
  18. 淘宝PC自动化测试框架AutomanX-王超
  19. 炫酷按钮《html》
  20. html的slider位置调整,ios设置UISlider的起始位置和增量

热门文章

  1. Matlab 贪婪交叉算子遗传算法
  2. 解决Jetbrains旗下产品的插件下载失败问题(IntelliJ IDEA、RubyMine、WebStorm、PhpStorm、PyCharm、AppCode、Android Studio等)
  3. 近 50 年来最具影响力的 10 种编程语言,都是谁发明的?
  4. Hashtable和Dictionary 的区别
  5. Mac 怎么删除管理员
  6. 全同态加密:TFHE
  7. 无线学习:名词解释【无线学习笔记一】
  8. 计算机网络技术as系统,【计算机网络技术】因特网的AS层次.ppt
  9. 基于php的医疗档案之电子病历系统-计算机毕业设计
  10. [英语六级] 六级通关笔记 — 听力题