1. 程式人生 > >ES6詳解一:複習ES5 新增內容

ES6詳解一:複習ES5 新增內容

ES5 新增內容

ES6 最近炒得火熱,準備寫一下ES6規範的主要內容。在這之前先複習一下ES5相關的內容。

ES5 總體來說改動很少,最重要的是如下幾個改動:

use strict

可以在函式定義的第一行通過一個字串語法把這個函式宣告為 嚴格模式

function() {
  "use strict";
}

在嚴格模式下,會有如下一些限制:

  • 未宣告的變數賦值直接報錯,而不是變成全域性變數
  • 函式預設的 this 將變成 undefined 而不是預設指向 window
  • 對只讀屬性進行寫操作,刪除不可刪除屬性,對不可拓展的物件新增屬性均會丟擲異常
  • 禁止使用 with 語句
  • 重名的屬性會報錯,重名的函式引數會報錯

JSON 支援

預設支援 JSON.parseJSON.stringify

物件和屬性

現在可以對一個物件的屬性設定 getter setter:

var obj = {};
Object.defineProperty(obj, "name", {
  get: function() {
    return name.toUpperCase();
    },
  set: function(n) {
    name=n;
    }
})

可以定義一個物件的屬性是否可以修改、是否可以刪除、是否可以新增:

Object.defineProperty( obj, "value", {
    value: true,
    writable: false,
    enumerable: true,
    configurable: true
});

現在可以直接凍結一個物件,凍結分兩種:

  • Object.seal(obj), 使物件的屬性配置配置無法修改,等價於給每一個屬性都設定成 configurale=false
  • Object.freeze(obj),除了 seal 之外,它還會是屬性值本身無法被修改,相當於對每個屬性同時進行了 configurable=falsewritable=false

現在可以更方便的遍歷物件的屬性了:

  • Object.getOwnPropertyNames
  • Object.keys

陣列新增方法

陣列新增瞭如下常用的方法:

  • map
  • every
  • filter
  • forEach
  • indexOf
  • reduce
  • reduceRight
  • some

所以你可以放心的寫如下程式碼:

[1,2,3].map(function(a){return a*a;})