乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      js語言規(guī)范ES5、6、7

       liang1234_ 2019-05-12
      ## **理解ES**
      1. 全稱: ECMAScript
      2. js語言的規(guī)范
      3. 我們用的js是它的實現
      4. js的組成
        * ECMAScript(js基礎)
        * 擴展-->瀏覽器端  
          * BOM
          * DOM
        * 擴展-->服務器端
          * Node.js
            
      ## ES5
      1. **嚴格模式**
        * 運行模式: 正常(混雜)模式與嚴格模式
        * 應用上嚴格式: 'strict mode';
        * 作用: 
          * 使得Javascript在更嚴格的條件下運行
          * 消除Javascript語法的一些不合理、不嚴謹之處,減少一些怪異行為
          * 消除代碼運行的一些不安全之處,保證代碼運行的安全
          * 需要記住的幾個變化
            * 聲明定義變量必須用var
            * 禁止自定義的函數中的this關鍵字指向全局對象
            * 創(chuàng)建eval作用域, 更安全
            
      2. **JSON對象**
        * 作用: 用于在json對象/數組與js對象/數組相互轉換
        * JSON.stringify(obj/arr)
            js對象(數組)轉換為json對象(數組)
        * JSON.parse(json)
            json對象(數組)轉換為js對象(數組)
            
      3. Object擴展
        * Object.create(prototype[, descriptors]) : 創(chuàng)建一個新的對象
          * 以指定對象為原型創(chuàng)建新的對象
          * 指定新的屬性, 并對屬性進行描述
            * value : 指定值
            * writable : 標識當前屬性值是否是可修改的, 默認為true
            * **get方法** : 用來得到當前屬性值的回調函數
            * **set方法** : 用來監(jiān)視當前屬性值變化的回調函數
        * 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擴展**
        * Function.prototype.bind(obj)
            * 將函數內的this綁定為obj, 并將函數返回
        * 面試題: 區(qū)別bind()與call()和apply()?
            * fn.bind(obj) : 指定函數中的this, 并返回函數
            * fn.call(obj) : 指定函數中的this,并調用函數
            
      6. Date擴展
        * Date.now() : 得到當前時間值
        
      ## ES6
      1. **2個新的關鍵字**
        * let/const
        * 塊作用域
        * 沒有變量提升
        * 不能重復定義
        * 值不可變
        
      2. **變量的解構賦值**
        * 將包含多個數據的對象(數組)一次賦值給多個變量
        * 數據源: 對象/數組
        * 目標: {a, b}/[a, b]
        
      3. 各種數據類型的擴展
        * 字符串
          * **模板字符串** 
            * 作用: 簡化字符串的拼接
            * 模板字符串必須用``
            * 變化的部分使用${xxx}定義
          * 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循環(huán)**
        * 可以遍歷任何容器
        * 數組
        * 對象
        * 偽/類對象
        * 字符串
        * 可迭代的對象
        
      6. **Promise**
        * 解決`回調地獄`(回調函數的層層嵌套, 編碼是不斷向右擴展, 閱讀性很差)
        * 能以同步編碼的方式實現異步調用
        * 在es6之前原生的js中是沒這種實現的, 一些第三方框架(jQuery)實現了promise
        * ES6中定義實現API: 
          ```
          // 1. 創(chuàng)建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
        
        
      * **區(qū)別方法的2種稱謂**
        * 靜態(tài)(工具)方法
          * Fun.xxx = function(){}
        * 實例方法
          * 所有實例對象 : Fun.prototype.xxx = function(){} //xxx針對Fun的所有實例對象
          * 某個實例對象 : fun.xxx = function(){} //xxx只是針對fun對象

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多