<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ![](images/screenshot_1528816960204.png) ## 1.forEach 自從JavaScript5起,我們開始可以使用內置的forEach方法: ```js myArray.forEach(function (value) { console.log(value); }); ``` 寫法簡單了許多,但也有**短處:你不能中斷循環(使用break語句或使用return語句。** ## 2.for–in for-in循環實際是為循環”enumerable“對象而設計的: ```js var obj = {a:1, b:2, c:3}; for (var prop in obj) { console.log("obj." + prop + " = " + obj[prop]); } // 輸出: // "obj.a = 1" // "obj.b = 2" // "obj.c = 3" ``` 你也可以用它來循環一個數組: ```js for (var index in myArray) { // 不推薦這樣 console.log(myArray[index]); } ``` 不推薦用for-in來循環一個數組,因為,不像對象,數組的index跟普通的對象屬性不一樣,是重要的數值序列指標。 **總之,for–in是用來循環帶有字符串key的對象的方法。** **for-in 循環的每次迭代都會產生更多開銷,因此要比其他循環類型慢**,一般速度為其他類型循環的 1/7。因此,除非明確需要迭代一個屬性數量未知的對象,否則應避免使用 for-in 循環。如果需要遍歷一個數量有限的已知屬性列表,使用其他循環會更快。 ## 3.for-of循環 ### 3.1 為什么要引進 for-of? 要回答這個問題,我們先來看看ES6之前的 3 種 for 循環有什么缺陷: - forEach 不能 break 和 return; - for-in 缺點更加明顯,它不僅遍歷數組中的元素,還會遍歷自定義的屬性,甚至原型鏈上的屬性都被訪問到。而且,遍歷數組元素的順序可能是隨機的。 所以,鑒于以上種種缺陷,我們需要改進原先的 for 循環。但 ES6 不會破壞你已經寫好的 JS 代碼。目前,成千上萬的 Web 網站依賴 for-in 循環,其中一些網站甚至將其用于數組遍歷。如果想通過修正 for-in 循環增加數組遍歷支持會讓這一切變得更加混亂,因此,標準委員會在 ES6 中增加了一種新的循環語法來解決目前的問題,即 for-of 。 ```js for (var value of myArray) { console.log(value); } ``` for-of的語法看起來跟for-in很相似,但它的功能卻豐富的多,它能循環很多東西。 ### 3.2 那 for-of 到底可以干什么呢? - 跟 forEach 相比,可以正確響應 break, continue, return。 - for-of 循環不僅支持數組,還支持大多數類數組對象,例如 DOM nodelist 對象。 - for-of 循環也支持字符串遍歷,它將字符串視為一系列 Unicode 字符來進行遍歷。 - for-of 也支持 Map 和 Set (兩者均為 ES6 中新增的類型)對象遍歷。 但需要注意的是,**for-of循環不支持普通對象**,但如果你想迭代一個對象的屬性,你可以用 for-in 循環(這也是它的本職工作)。 最后要說的是,ES6 引進的另一個方式也能實現遍歷數組的值,那就是 **Iterator**。 **循環一個數組(Array)** ```js let iterable = [10, 20, 30]; for (let value of iterable) { console.log(value); } // 10 // 20 // 30 ``` 我們可以使用const來替代let,這樣它就變成了在循環里的不可修改的靜態變量。 ```js let iterable = [10, 20, 30]; for (const value of iterable) { console.log(value); } // 10 // 20 // 30 ``` **循環一個字符串** ```js let iterable = "boo"; for (let value of iterable) { console.log(value); } // "b" // "o" // "o" ``` **循環一個類型化的數組** ```js let iterable = new Uint8Array([0x00, 0xff]); for (let value of iterable) { console.log(value); } // 0 // 255 ``` **循環一個Map** ```js let iterable = new Map([["a", 1], ["b", 2], ["c", 3]]); for (let [key, value] of iterable) { console.log(value); } // 1 // 2 // 3 for (let entry of iterable) { console.log(entry); } // [a, 1] // [b, 2] // [c, 3] ``` **循環一個 Set** ```js let iterable = new Set([1, 1, 2, 2, 3, 3]); for (let value of iterable) { console.log(value); } // 1 // 2 // 3 ``` **循環一個 DOM collection** 循環一個DOM collections,比如NodeList,之前我們討論過如何循環一個NodeList,現在方便了,可以直接使用for-of循環: ```js // Note: This will only work in platforms that have // implemented NodeList.prototype[Symbol.iterator] let articleParagraphs = document.querySelectorAll("article > p"); for (let paragraph of articleParagraphs) { paragraph.classList.add("read"); } ``` **循環一個擁有enumerable屬性的對象** for–of循環并不能直接使用在普通的對象上,但如果我們按對象所擁有的屬性進行循環,可使用內置的Object.keys()方法: ```js for (var key of Object.keys(someObject)) { console.log(key + ": " + someObject[key]); } ``` **循環一個生成器(generators)** ```js function* fibonacci() { // a generator function let [prev, curr] = [0, 1]; while (true) { [prev, curr] = [curr, prev + curr]; yield curr; } } for (let n of fibonacci()) { console.log(n); // truncate the sequence at 1000 if (n >= 1000) { break; } } ``` ## 4.其他 但是 ES5 定義了一些其他有用的方法,下面是一部分: - every: 循環在第一次 return false 后返回 - some: 循環在第一次 return true 后返回 - filter: 返回一個新的數組,該數組內的元素滿足回調函數 - map: 將原數組中的元素處理后再返回 - reduce: 對數組中的元素依次處理,將上次處理結果作為下次處理的輸入,最后得到最終結果。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看