说明
记录 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]]].flat(1)
;[1, 2, [3, 4], [[5, 6]]].flat(2)
|
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'].flatMap(x => [x])
;['a', 'b', 'c'].flatMap(x => [[x]])
|
Object.fromEntries()
和Object.entries
的作用相反
1 2 3 4 5
| Object.entries({ foo: 1, bar: 2 })
Object.fromEntries([['foo', 1], ['bar', 2]])
|
String.prototype.{trimStart, trimEnd}
1 2 3 4 5
| ' abc '.trimStart()
' abc '.trimEnd()
|
Symbol.prototype.description
1 2 3 4 5 6
| const sym = Symbol('The description') String(sym)
sym.description
|
可选 catch 绑定
在try catch
中,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)
|
在此之前,如果参数的 code point 在U+D800 to U+DFFF
,输出的字符无法通过 UTF-8 或 UTF-16 编码。
1
| JSON.stringify('\uD800')
|
在此之后,输出的字符可以通过 UTF8 或 UTF-16 正常编码
1
| JSON.stringify('\uD800')
|
JSON superset
在此之前,字符串中不能直接包含 U+2028
行分隔符 和 U+2029
段落分隔符。
1 2
| const sourceCode = '"\u2028"' eval(sourceCode)
|
在此之后,可以包含。
1 2
| const json = '"\u2028"' JSON.parse(json)
|
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())
console.log(Math.pow.toString())
|
参考
https://exploringjs.com/es2018-es2019/toc.html
MDN-JSON.stringify