ES5/6/7

ECMAScript(js語言規範)es6

###ES5json

     1.   嚴格模式數組

            運行模式: 正常(混雜)模式與嚴格模式promise

   應用上嚴格模式: ‘strict mode’框架

      二、JSON對象 異步

  * JSON.stringify(obj/arr)
        js對象(數組)轉換爲json對象(數組)
  * JSON.parse(json)
       json對象(數組)轉換爲js對象(數組)模塊化

      3. Object 擴展函數

           Object.create()以指定對象爲原型建立新的對象工具

    指定新的屬性  並對屬性進行描述this

            * value : 指定值
            * writable : 標識當前屬性值是不是可修改的, 默認爲true
            * **get方法** : 用來獲得當前屬性值的回調函數
            * **set方法** : 用來監視當前屬性值變化的回調函數
         * Object.defineProperties(object, descriptors) : 爲指定對象定義擴展多個屬性

  4. Array 擴展

     * Array.prototype.indexOf(value) : 獲得值在數組中的第一個下標
      * Array.prototype.lastIndexOf(value) : 獲得值在數組中的最後一個下標
      * **Array.prototype.forEach(function(item, index){}) : 遍歷數組**
      * **Array.prototype.map(function(item, index){}) : 遍歷數組返回一個新的數組**
      * **Array.prototype.filter(function(item, index){}) : 遍歷過濾出一個子數組**

  5. Function擴展

  6. Date擴展
     * Date.now() : 獲得當前時間值

#####ES6

1. let  /  const

* 塊做用域
  * 沒有變量提高
  * 不能重複定義
  * 值不可變

 

2. 變量解構賦值

對象數組賦值

[a,b,c] = [1,2,3]

若是默認值是一個表達式,那麼這個表達式是惰性求值的,即只有在用到的時候纔會求值。

 

3. 模板字符串

* contains(str) : 判斷是否包含指定的字符串
    * startsWith(str) : 判斷是否以指定字符串開頭
    * endsWith(str) : 判斷是否以指定字符串結尾
    * repeat(count) : 重複指定次數

* 對象
    * **簡化的對象寫法**
      ```
      let name = 'Tom';
      let age = 12;
      let person = {
          name,
          age,
          setName (name) {
              this.name = name;
          }
      };
      ```
    * Object.assign(target, source1, source2..) : 將源對象的屬性複製到目標對象上
    * Object.is(v1, v2) : 判斷2個數據是否徹底相等
    * __proto__屬性 : 隱式原型屬性

 

* 數組
    * Array.from(v) : 將僞數組對象或可遍歷對象轉換爲真數組
    * Array.of(v1, v2, v3) : 將一系列值轉換成數組
    * find(function(value, index, arr){return true}) : 找出第一個知足條件返回true的元素
    * findIndex(function(value, index, arr){return true}) : 找出第一個知足條件返回true的元素下標

* 函數
    * **箭頭函數**
      * 用來定義匿名函數
      * 基本語法:
        * 沒有參數: () => console.log('xxxx')
        * 一個參數: i => i+2
        * 大於一個參數: (i,j) => i+j
        * 函數體不用大括號: 默認返回結果
        * 函數體若是有多個語句, 須要用{}包圍
      * 使用場景: 多用來定義回調函數
    * **形參的默認值**
      * 定義形參時指定其默認的值
    * **rest(可變)參數**
      * 經過形參左側的...來表達, 取代arguments的使用
    * **擴展運算符(...)**
      * 能夠分解出數組或對象中的數據

4. set/Map容器結構
  * 容器: 能保存多個數據的對象, 同時必須具有操做內部數據的方法
  * 任意對象均可以做爲容器使用, 但有的對象不太適合做爲容器使用(如函數)
  * **Set的特色**: 保存多個value, value是不重複 ====>數組元素去重
  * **Map的特色**: 保存多個key--value, key是不重複, value是能夠重複的
  * API
    * Set()/Set(arr) //arr是一維數組
    * add(value)
    * delete(value)
    * clear();
    * has(value)
    * size
    * 
    * Map()/Map(arr) //arr是二維數組
    * set(key, value)
    * delete(key)
    * clear()
    * has(key)
    * size

 

5. **for--of循環**
  * 能夠遍歷任何容器
  * 數組
  * 對象
  * 僞/類對象
  * 字符串
  * 可迭代的對象

 

6. **Promise**
  * 解決`回調地獄`(回調函數的層層嵌套, 編碼是不斷向右擴展, 閱讀性不好)
  * 能以同步編碼的方式實現異步調用
  * 在es6以前原生的js中是沒這種實現的, 一些第三方框架(jQuery)實現了promise
  * ES6中定義實現API: 
    ```
    // 1. 建立promise對象
    var promise = new Promise(function(resolve, reject){ 
      // 作異步的操做 
      if(成功) { // 調用成功的回調
        resolve(result); 
      } else { // 調用失敗的回調
        reject(errorMsg); 
      } 
    }) 
    // 2. 調用promise對象的then()
    promise.then(function(
      result => console.log(result), 
      errorMsg => alert(errorMsg)
    ))
    ```

 

7. **class類**
  * 用 class 定義一類
  * 用 constructor() 定義構造方法(至關於構造函數)
  * 通常方法: xxx () {}
  * 用extends來定義子類
  * 用super()來父類的構造方法
  * 子類方法自定義: 將從父類中繼承來的方法從新實現一遍
  * js中沒有方法重載(方法名相同, 但參數不一樣)的語法

 

8. **模塊化(後面講)**

 

 

## ES7* 指數運算符: *** Array.prototype.includes(value) : 判斷數組中是否包含指定value    * **區別方法的2種稱謂**  * 靜態(工具)方法    * Fun.xxx = function(){}  * 實例方法    * 全部實例對象 : Fun.prototype.xxx = function(){} //xxx針對Fun的全部實例對象    * 某個實例對象 : fun.xxx = function(){} //xxx只是針對fun對象

本站公眾號
   歡迎關注本站公眾號,獲取更多信息