目录
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
- 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.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() 方法返回一个包含所有匹配正则表达式及分组捕获结果的迭代器
举例:获取字符串中的'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去除字符串首尾空格
const str = ' ab '
console.log(str.trimStart().trimEnd()) //ab
之前只能把Symbol转成字符串来获取描述,现在可以使用description方法直接获取
const sym = Symbol('描述')
console.log(String(sym)) //Symbol(描述)
console.log(sym.description) //描述
在之前,必须为catch方法带参数:
try{
}catch(e){
}
现在如果不需要使用e可以去掉参数:
try{
}catch{
}
以前采用不稳定的快速排序算法,最坏情况时间复杂度是O(N^2),新的V8引擎使用TimSort(),一种起源于归并排序 和插入排序的混合排序算法,是稳定的排序算法,时间复杂度降低为O(nlogn)
Function.prototype.toString()现在返回精确字符,包括空格和注释
function /*注释*/ foo(){ /*注释*/}
console.log(foo.toString()) //function /*注释*/ foo(){ /*注释*/}