# 🚀ES10

📅 2023/8/02

# flat()

flat(depth):创建一个新的数组,并根据指定深度递归地将所有子数组元素拼接到新的数组中。

  • depth(可选):指定要提取嵌套数组的结构深度,默认值为 1。
  • 返回值:一个新的数组,其中包含拼接后的子数组元素。
const arr1 = [1, 2, [3, 4]]
arr1.flat() // [1, 2, 3, 4]

const arr2 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]]
arr2.flat(Infinity) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

const arr3 = [1, , 3, ["a", , "c"]]
arr3.flat() // [ 1, 3, "a", "c" ]

const arrayLike = {
    length: 3,
    0: [1, 2],
    // 嵌套的类数组对象不会被展平
    1: { length: 2, 0: 3, 1: 4 },
    2: 5,
}
Array.prototype.flat.call(arrayLike)
// [ 1, 2, { '0': 3, '1': 4, length: 2 }, 5 ]

# flatMap()

flatMap() 方法对数组中的每个元素应用给定的回调函数,然后将结果展开一级,返回一个新数组。它等价于在调用 map() 方法后再调用深度为 1 的 flat() 方法(arr.map(...args).flat())

# try catch

修改了try catch 的使用,catch不必再有入参

# trimStart, trimEnd

增加字符串的trimStart, trimEnd方法,分别是去掉首尾空格

# Object.fromEntries()

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

//将 Map 转换成对象
const entries = new Map([
  ['foo', 'bar'],
  ['baz', 42]
])
const obj = Object.fromEntries(entries)
console.log(obj) //{ foo: "bar", baz: 42 }

//将 Array 转换成对象
const arr = [
    ["0", "a"],
    ["1", "b"],
    ["2", "c"],
]
const obj = Object.fromEntries(arr)
console.log(obj) // { 0: "a", 1: "b", 2: "c" }

//对象转换
const object1 = { a: 1, b: 2, c: 3 }
const object2 = Object.fromEntries(
    Object.entries(object1).map(([key, val]) => [key, val * 2]),
)
console.log(object2) // { a: 2, b: 4, c: 6 }

# Function.prototype.toString()

toString() 方法返回一个表示当前函数源代码的字符串。也可以使用模板字符串实现

function sum(a, b) {
    return a + b
}
console.log(sum.toString())
console.log(`${sum}`)
/*
  输出:
  function sum(a, b) {
     return a + b
   }
 */

# Symbol.prototype.description

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

Symbol("desc").toString() // "Symbol(desc)"
Symbol("desc").description // "desc"
Symbol("").description // ""
Symbol().description // undefined

# JSON.superset、JSON.stringify

对JSON对象的优化:在ES10之前的版本中,不接受非转义的行分隔符U+2028和段落分隔符U+2029。格式良好的 JSON.stringify()。