Skip to content

Latest commit

 

History

History
156 lines (146 loc) · 4.41 KB

es10.md

File metadata and controls

156 lines (146 loc) · 4.41 KB

ES10新增语法

目录

新的基本数据类型BigInt

BigInt可以表示任意大的整数,两种方式创建BigInt:

let num = 1n //bigint
let num2 = BigInt(1)
console.log(typeof num) //bigint
console.log(num === 1)  //false
console.log(num == 1)  //true

现在加上BigInt一共七种数据类:String、Number、Boolean、Null、Undefined、Symbol、BigInt

Array的flat和flatMap方法

  • flat方法用来拉平数组,默认只能拉平一层
const arr = [1,2,[3,4,[5,6]]]
console.log(arr.flat()) //[ 1, 2, 3, 4, [ 5, 6 ] ]

可以使用参数来指定深度,或者使用Infinity指定任意深度

console.log(arr.flat(2))  // [ 1, 2, 3, 4, 5, 6 ]
console.log(arr.flat(Infinity)) // [ 1, 2, 3, 4, 5, 6 ]

去除数组的空项

console.log([1,2,,,[,1],,4].flat())  //[ 1, 2, 1, 4 ]
  • flatMap方法和map类似,但是能拉平一层数组
console.log([1,2,3,4].flatMap(x=>[x*2]))  //[ 2, 4, 6, 8 ]
console.log([1,2,3,4].flatMap(x=>[[x*2]]))  //[ [ 2 ], [ 4 ], [ 6 ], [ 8 ] ]

Object的fromEntries方法

传入一个键值对的列表,并返回一个带有这些键值对的新对象,和Object.entries方法相反; 可以将Map转化为对象

const map = new Map([['name', 'jie'],['addr', 'beijing']])
console.log(map) // Map(2) { 'name' => 'jie', 'addr' => 'beijing' }
console.log(Object.fromEntries(map)) //{ name: 'jie', addr: 'beijing' }

可以将Array转化为对象

console.log(Object.fromEntries([['name', 'jie'],['addr', 'beijing']])) //{ name: 'jie', addr: 'beijing' }

matchAll方法

matchAll() 方法返回一个包含所有匹配正则表达式及分组捕获结果的迭代器
举例:获取字符串中的'xue'的位置,以前需要使用循环加exec方式:

const str = 'yideng xuetang xuetang'
const reg = /xue*/g;

while((matches = reg.exec(str)) !== null) {
  console.log(`${matches[0]}-${reg.lastIndex}`) //xue-10  xue-18
}

ES10可以使用matchAll:

let matches2 = str.matchAll(reg); //返回的是一个迭代器
for (const re of matches2) {
  console.log(re)
}
/*
[ 'xue', index: 7, input: 'yideng xuetang xuetang', groups: undefined ]
[
  'xue',
  index: 15,
  input: 'yideng xuetang xuetang',
  groups: undefined
]
 */

matchAll可以更好的用于分组,以前使用match方法并不能不会分组,只能获取匹配的字符串

const reg = /y(i)(deng(\d?))/g;
const str = 'yideng66yideng66'
console.log(str.match(reg))  //[ 'yideng6', 'yideng6' ]

使用matchAll的正则表达式需要加/g标识,可以获得所有匹配的分组

console.log([...str.matchAll(reg)])
/*
[
  [
    'yideng6',
    'i',
    'deng6',
    '6',
    index: 0,
    input: 'yideng66yideng66',
    groups: undefined
  ],
  [
    'yideng6',
    'i',
    'deng6',
    '6',
    index: 8,
    input: 'yideng66yideng66',
    groups: undefined
  ]
]
*/

trimStart和trimEnd

trimStart和trimEnd去除字符串首尾空格

const str = '  ab   '
console.log(str.trimStart().trimEnd())  //ab

Symbol的description方法

之前只能把Symbol转成字符串来获取描述,现在可以使用description方法直接获取

const sym = Symbol('描述')
console.log(String(sym))  //Symbol(描述)
console.log(sym.description) //描述

catch方法参数可取消

在之前,必须为catch方法带参数:

try{
}catch(e){
}

现在如果不需要使用e可以去掉参数:

try{
}catch{
}

修复数组的sort方法

以前采用不稳定的快速排序算法,最坏情况时间复杂度是O(N^2),新的V8引擎使用TimSort(),一种起源于归并排序 和插入排序的混合排序算法,是稳定的排序算法,时间复杂度降低为O(nlogn)

新的Function的toString方法

Function.prototype.toString()现在返回精确字符,包括空格和注释

function /*注释*/ foo(){ /*注释*/}
console.log(foo.toString())  //function /*注释*/ foo(){ /*注释*/}