0%

es2019

说明

记录 ES2019 相关知识

Array.prototype.{flat, flatMap}

Array.prototype.flat()

  • 不传参数时,将数组第 1 层“打平”
  • 传入参数 n 时,将数组第 1-n 层“打平”,n 为 0 时返回和原数组一样的数组
  • 返回打平后的数组,原数组不影响。
1
2
3
4
5
6
;[1, 2, [3, 4], [[5, 6]]].flat(0)
// [ 1, 2, [ 3, 4 ], [ [ 5, 6 ] ] ]
;[1, 2, [3, 4], [[5, 6]]].flat(1)
// [ 1, 2, 3, 4, [ 5, 6 ] ]
;[1, 2, [3, 4], [[5, 6]]].flat(2)
// [ 1, 2, 3, 4, 5, 6 ]

Array.prototype.flatMap()

arr.flatMap(func)相当于arr.map(func).flat(1)

1
2
3
4
5
6
;['a', 'b', 'c'].flatMap(x => x)
// [ 'a', 'b', 'c' ]
;['a', 'b', 'c'].flatMap(x => [x])
// [ 'a', 'b', 'c' ]
;['a', 'b', 'c'].flatMap(x => [[x]])
// [ [ 'a' ], [ 'b' ], [ 'c' ] ]

Object.fromEntries()

Object.entries的作用相反

1
2
3
4
5
Object.entries({ foo: 1, bar: 2 })
// [['foo', 1], ['bar', 2]]

Object.fromEntries([['foo', 1], ['bar', 2]])
// {foo: 1, bar: 2}

String.prototype.{trimStart, trimEnd}

1
2
3
4
5
'  abc  '.trimStart()
// 'abc '

' abc '.trimEnd()
// ' abc'

Symbol.prototype.description

1
2
3
4
5
6
const sym = Symbol('The description')
String(sym)
// Symbol(The description)

sym.description
// The description

可选 catch 绑定

try catch中,catch 可以不传参数

1
2
3
4
5
try {
//...
} catch {
//...
}
  • 用途,不想捕获错误
1
2
3
4
5
6
7
let supported
try {
useTheFeature()
supported = true
} catch {
supported = false
}

稳定的 Array.prototype.sort()

意思是: 如果两个元素经过比较相等,会维持其先后顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const arr = [
{
key: 'b',
value: 1
},
{
key: 'a',
value: 2
},
{
key: 'b',
value: 3
}
]
arr.sort((x, y) => x.key.localeCompare(y.key, 'en-US'))

console.log(arr)
// [ { key: 'a', value: 2 },
// { key: 'b', value: 1 },
// { key: 'b', value: 3 } ]

Well-formed JSON.stringify

在此之前,如果参数的 code point 在U+D800 to U+DFFF,输出的字符无法通过 UTF-8 或 UTF-16 编码。

1
JSON.stringify('\uD800') // '"�"'

在此之后,输出的字符可以通过 UTF8 或 UTF-16 正常编码

1
JSON.stringify('\uD800') // '"\\ud800"'

JSON superset

在此之前,字符串中不能直接包含 U+2028行分隔符 和 U+2029段落分隔符。

1
2
const sourceCode = '"\u2028"'
eval(sourceCode) // SyntaxError

在此之后,可以包含。

1
2
const json = '"\u2028"'
JSON.parse(json) // OK

Function.prototype.toString 修订

  • 如果函数是通过编写 ECMAScript 源代码创建的,toString()原样返回其源码
  • 否则,返回标准占位符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function test(a, b) {
// 这是注释
console.log('test')
return a + b
}

console.log(test.toString())
// function test(a, b) {
// // 这是注释
// console.log('test')
// return a + b
// }

console.log(Math.pow.toString())
// function pow() { [native code] }

参考

https://exploringjs.com/es2018-es2019/toc.html

MDN-JSON.stringify