ES-2019新特性

derek_skx發表於2019-02-11

1月30日,TC39將以下特性加入到了ES-2019\

  1. JSON ⊂ ECMAScript (JSON superset)

    • 行分隔符(U +2018)和段分隔符(U+2019)允許寫在字串文字中,和JSON匹配\
  2. 更加友好的JSON.stringify(修復了一些超出範圍的unicode展示錯誤的問題)\

    • 以前:
        JSON.stringify('\uD800')  =>'"?"'
    複製程式碼
    • 現在:
        JSONstringify('\uD800') => '\\uD800'
        JSON.stringify('\uD800') === '\\uD800' => true
    複製程式碼
  3. Array.sort

    • 原來:用的不穩定的quickSort(快排),超過10個元素以上的資料在V8中會不穩定
    • 現在:採用了穩定的TimSort演算法,解決了這個問題
  4. toString

    • 原來:funciton.toString()只返回function關鍵字
    • 現在:返回精準字元,包括空格和註釋
        function /*test func*/ foo() {}
        foo.toString()\
        原來返回=> 'function foo(){}'
        現在返回=> 'function /*test func*/ foo() {}'
    複製程式碼
  5. Array新增flat和flatMap方法

    • flat:
      • 作用:陣列降維,返回一個新陣列,不改變原來陣列
      • 接受引數:Number型別,預設為1,根據引數來降低維度層次
        const arr = [2,3,[4],[5,[6,[7]]]]
        arr.flat(1)   //=>[2,3,4,5,[6,[7]]]
        arr.flat(2)   // => [2,3,4,5,6,[7]]
        arr.flat(Infinity)   //=>[2,3,4,5,6,7]
        console.log(arr)  // [2,3,[4],[5,[6,[7]]]]
    複製程式碼
    • flatMap:
      • 作用:對資料進行統一變化處理,返回一個新陣列
      • 接受引數:func
        const arr = [1,2,3]
        //對每一個元素做處理
        arr.glatMap(x => x*2)  // [2,4,6]
        //對一個元素多處理,返回多個對應的值,但是返回必須是陣列,裡面的型別不限制
        arr.flatMap(x => [x,x*2]   // [1,2,2,4,3,6]
        arr.flatMap(x=>[{test:x}]  // [{test:1},{test:2},{test;3}]
        //如果返回{}會全部返回undefined
        arr.flarMap(x => {x:x})   // [undefined,undefined,undefined]
    複製程式碼
  6. Object新增fromEntries方法(和Object.entries互補)

    • 作用:把Object.entries轉換後的二維陣列重新轉換為物件
    • 接受引數:目標陣列
    const obj = {x:3,y:4}
    let entries = Object.entries(obj)    // [[x,3],[y,4]]
    let obj2 = Object.fromEntries(entries)   // {x:3,y:4}
複製程式碼
  1. String新增空格清楚方法trimStart和trimEnd
    const str = '   test string  ' 
    // trimStart:去除開頭空格
    str.trimStart()    // 'test string   '
    // trimEnd:去除結尾空格
    str.trimEnd()    // '   test string'
    // trim:首尾空格都去除
    str.trim()   // 'test string'
複製程式碼
  1. Symbol新增description屬性

    • 作用:獲取建立Symbol時寫的備註
    const sym = Symbol('this is remark')
    // 原來獲取備註方式
    String(sym)   // 'Symbol(this is remark)'
    // 現在
    sym.description   // 'this is remark'
複製程式碼