JavaScript 6 的新特性介紹

solution發表於2021-09-09


JavaScript 6裡都有啥新鮮東西?讓我們一起來看看JavaScript 6的一些新特性。

  • letconst (用來定義block-local變數), 程式過程中的function

  • 解構: let {x, y} = pt; let [s, v, o] = triple();
    (前提是let pt = {x:2, y:-5})

  • 預設引數值: function f(x, y=1, z=0) {⋯}

  • 其它引數: function g(i, j, ...r) { return r.slice(i, j); }
    (不需要再使用 arguments )。

  • 資料展開: let a = [0,1,2,3], o = new Something(...a);。也可以用於陣列字面量: [1, ...array, 4].

  • 物件簡寫:
    let one = 1; { one, func_one() {return 1;}, ['key ' + one]: 1 }.

  • 函式簡寫 (a) => a * a 效果等同
    (function(a) { return a * a; }).bind(this)

  • map, set: let m = new Map(); m.set(key, value); m.has(key); m.get(key).
    還包括 .clear().delete().forEach().keys().

  • 弱map: let map = new WeakMap()。當有迴圈引用時使用它。同理new WeakSet()

  • promise: new Promise((resolve, reject) => {…}).

    • 當 promise.then(value => {…})時,resolve(valueOrPromise) 返回承諾的值 (或者是一個新的promise,形成鏈式呼叫)

    • promise.then(…).then(…).catch(error => {…})reject(new Error(…))中斷promise

    • 快速 promise 建立: Promise.resolve(value)Promise.reject(error).

    • 迭代: Promise.all(listOfPromises).then(listOfValues => …),
      Promise.race(listOfPromises).then(valueThatResolvedFirst => …)

  • 代理: let obj = new Proxy(proto, handler).
    簡單說: 使用類物件的元素進行過載(能夠帶來所有可訪問的屬性。)

  • 生成器: function* gen() { yield 1; yield 2; }
    事實上,gen() 會返回一個含有 next() 函式的物件。

  • 迴圈: for (var [key, val] of items(x)) { alert(key + ',' + val); }

  • 類定義中使用extendssuper, 和 static:

    class Point extends Base {  constructor(x,y) {    super();    this[px] = x, this[py] = y;    this.r = function() { return Math.sqrt(x*x + y*y); }
      }
      get x() { return this[px]; }
      get y() { return this[py]; }
      proto_r() { return Math.sqrt(this[px] * this[px] +      this[py] * this[py]); }
      equals(p) { return this[px] === p[px] &&      this[py] === p[py]; }
    }
  • 符號(Symbol)物件,建立私有的key,可用於map和類中(私有成員
    members)。


    let a = Map();
    {  let k = Symbol();
      a.set(k, 'value');  // 這裡你可以訪問和設定'value',比如a.get(k)。}//這裡不行,k是不可見的。
  • 模組化:

    module math {  export function sum(x, y) {    return x + y;
      }  export var pi = 3.141593;
    }import {sum, pi} from math;
    alert(sum(pi,pi));
  • 模板式字串: 可以多行,並能嵌入變數。
    `You are ${age} years old.`.


    // 多行字串re`line1: (words )*
    line2: w+`// It desugars to:re({raw:'line1: (words )*nline2: w+',
        cooked:'line1: (words )*nline2: w+'})
  • 型別化陣列


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2459/viewspace-2803448/,如需轉載,請註明出處,否則將追究法律責任。

相關文章