js 中的循環(huán)


在講循環(huán)的之前,先知道一下循環(huán)結(jié)構(gòu)的執(zhí)行步驟 
1、聲明循環(huán)變量;
2、判斷循環(huán)條件;
3、執(zhí)行循環(huán)體操作;
4、更新循環(huán)變量;
5、然后循環(huán)執(zhí)行2-4,直到條件不成立,跳出循環(huán)。

1.while循環(huán)


var num = 1;//1、聲明循環(huán)變量
while (num<=10){//2、判斷循環(huán)條件;
    document.write(num+"<br />");//3、執(zhí)行循環(huán)體操作;
    num++;//4、更新循環(huán)變量;
}

while循環(huán)()中的表達(dá)式,運(yùn)算結(jié)果可以是各種類(lèi)型,但是最終都會(huì)轉(zhuǎn)為真假,轉(zhuǎn)換規(guī)則如下。
  ①Boolean:true為真,false為假;
 ?、赟tring:空字符串為假,所有非空字符串為真;
 ?、跱umber:0為假,一切非0數(shù)字為真;
 ?、躰ull/Undefined/NaN:全為假;
 ?、軴bject:全為真。

2.do-while循環(huán)


while循環(huán)特點(diǎn):先判斷后執(zhí)行;
do-while循環(huán)特點(diǎn):先執(zhí)行再判斷,即使初始條件不成立,do-while循環(huán)至少執(zhí)行一次;

var num = 10;            
do{
    document.write(num+"<br />");//10 9 8 7 6 5 4 3 2 1 0
    num--;
    }while(num>=0);
            
document.write(num);//-1

3.for循環(huán)


for循環(huán)
1、for有三個(gè)表達(dá)式:①聲明循環(huán)變量;②判斷循環(huán)條件;③更新循環(huán)變量;
三個(gè)表達(dá)式之間,用;分割,for循環(huán)三個(gè)表達(dá)式都可以省略,但是兩個(gè)“;”缺一不可。
2、for循環(huán)的執(zhí)行特點(diǎn):先判斷再執(zhí)行,與while相同
3、for循環(huán)三個(gè)表達(dá)式都可以有多部分組成,第二部分多個(gè)判斷條件用&& ||連接,第一三部分用逗號(hào)分割;

for (var num =1; num<=10; num++) {
    document.write(num+" <br />"); //1 2 3 4 5 6 7 8 9 10 
}

4.for-in循環(huán)


for-in 循環(huán)主要用于遍歷對(duì)象
for()中的格式:for(keys in zhangsan){}
keys表示obj對(duì)象的每一個(gè)鍵值對(duì)的鍵!!所有循環(huán)中,需要使用obj[keys]來(lái)取到每一個(gè)值?。?!
for-in 循環(huán),遍歷時(shí)不僅能讀取對(duì)象自身上面的成員屬性,也能延續(xù)原型鏈遍歷出對(duì)象的原型屬性
所以,可以使用hasOwnProperty判斷一個(gè)屬性是不是對(duì)象自身上的屬性。
obj.hasOwnProperty(keys)==true 表示這個(gè)屬性是對(duì)象的成員屬性,而不是原先屬性

//聲明一個(gè)Peson類(lèi)
function Person(){
    this.name = "張三";
    this.age = 14;
    this.func1 = function(){        
    }
}
//實(shí)例化這個(gè)類(lèi)
var zhangsan = new Person();
//使用for-in遍歷這個(gè)對(duì)象
for(keys in zhangsan){
    console.log(zhangsan[keys])
}

5.for-of循環(huán)


ES6 借鑒 C++、Java、C# 和 Python 語(yǔ)言,引入了for...of循環(huán),作為遍歷所有數(shù)據(jù)結(jié)構(gòu)的統(tǒng)一的方法。
一個(gè)數(shù)據(jù)結(jié)構(gòu)只要部署了Symbol.iterator屬性,就被視為具有iterator接口,就可以用for...of循環(huán)遍歷它的成員。也就是說(shuō),for...of循環(huán)內(nèi)部調(diào)用的是數(shù)據(jù)結(jié)構(gòu)的Symbol.iterator方法。
for...of循環(huán)可以使用的范圍包括數(shù)組、Set 和 Map 結(jié)構(gòu)、某些類(lèi)似數(shù)組的對(duì)象(比如arguments對(duì)象、DOM NodeList 對(duì)象)、后文的 Generator 對(duì)象,以及字符串。

①數(shù)組

JavaScript 原有的for...in循環(huán),只能獲得對(duì)象的鍵名,不能直接獲取鍵值。ES6 提供for...of循環(huán),允許遍歷獲得鍵值。

   var arr = ['a', 'b', 'c', 'd'];
    for (let a in arr) {
          console.log(a); // 0 1 2 3
     }  
     for (let a of arr) {
          console.log(a); // a b c d
     }

上面代碼表明,for...in循環(huán)讀取鍵名,for...of循環(huán)讀取鍵值。如果要通過(guò)for...of循環(huán),獲取數(shù)組的索引,可以借助數(shù)組實(shí)例的entries方法和keys方法

②Set 和 Map 結(jié)構(gòu)

 var engines = new Set(["Gecko", "Trident", "Webkit", "Webkit"]);
        for (var e of engines) {
          console.log(e);
        }
        // Gecko  Trident    Webkit
        
        var es6 = new Map();
        es6.set("edition", 6);
        es6.set("committee", "TC39");
        es6.set("standard", "ECMA-262");
        for (var [name, value] of es6) {
          console.log(name + ": " + value);
        }
        // edition: 6
        // committee: TC39
        // standard: ECMA-262

上面代碼演示了如何遍歷 Set 結(jié)構(gòu)和 Map 結(jié)構(gòu)。值得注意的地方有兩個(gè),首先,遍歷的順序是按照各個(gè)成員被添加進(jìn)數(shù)據(jù)結(jié)構(gòu)的順序。其次,Set 結(jié)構(gòu)遍歷時(shí),返回的是一個(gè)值,而 Map 結(jié)構(gòu)遍歷時(shí),返回的是一個(gè)數(shù)組,該數(shù)組的兩個(gè)成員分別為當(dāng)前 Map 成員的鍵名和鍵值。

③類(lèi)似數(shù)組的對(duì)象

類(lèi)似數(shù)組的對(duì)象包括好幾類(lèi)。下面是for...of循環(huán)用于字符串、DOM NodeList 對(duì)象、arguments對(duì)象的例子。

 // 字符串
        var str = "hello";
        
        for (let s of str) {
          console.log(s); // h e l l o
        }
        
        // DOM NodeList對(duì)象
        let paras = document.querySelectorAll("p");
        
        for (let p of paras) {
          p.classList.add("test");
        }
        
        // arguments對(duì)象
        function printArgs() {
          for (let x of arguments) {
            console.log(x);
          }
        }
        printArgs('a', 'b');// 'a' 'b'

與其他遍歷語(yǔ)法的比較
for...in循環(huán)有幾個(gè)缺點(diǎn)
①數(shù)組的鍵名是數(shù)字,但是for...in循環(huán)是以字符串作為鍵名“0”、“1”、“2”等等。
②for...in循環(huán)不僅遍歷數(shù)字鍵名,還會(huì)遍歷手動(dòng)添加的其他鍵,甚至包括原型鏈上的鍵。
③某些情況下,for...in循環(huán)會(huì)以任意順序遍歷鍵名。
for...in循環(huán)主要是為遍歷對(duì)象而設(shè)計(jì)的,不適用于遍歷數(shù)組。
for...of循環(huán)
有著同for...in一樣的簡(jiǎn)潔語(yǔ)法,但是沒(méi)有for...in那些缺點(diǎn)。
不同于forEach方法,它可以與break、continue和return配合使用。
提供了遍歷所有數(shù)據(jù)結(jié)構(gòu)的統(tǒng)一操作接口。

6.循環(huán)控制語(yǔ)句


1、break:跳出本層循環(huán),繼續(xù)執(zhí)行循環(huán)后面的語(yǔ)句。
如果循環(huán)有多層,則break只能跳出一層。
2、continue:跳過(guò)本次循環(huán)剩余的代碼,繼續(xù)執(zhí)行下一次循環(huán)。
①對(duì)與for循環(huán),continue之后執(zhí)行的語(yǔ)句,是循環(huán)變量更新語(yǔ)句i++;
②對(duì)于while、do-while循環(huán),continue之后執(zhí)行的語(yǔ)句,是循環(huán)條件判斷;
因此,使用這兩個(gè)循環(huán)時(shí),必須將continue放到i++之后使用,否則,continue將跳過(guò)i++進(jìn)入死循環(huán)。

for(var i = 1; i < 10; i++){
     
        if(i == 4){
            continue;
        }
        console.log(n);//1 2 3 5 6 7 8 9
    }

 for(var i = 1; i < 10; i++){
        if(i == 4){
            break;
        }
         console.log(i);//1 2 3
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,584評(píng)論 0 13
  • Iterator(遍歷器)的概念 JavaScript原有的表示“集合”的數(shù)據(jù)結(jié)構(gòu),主要是數(shù)組和對(duì)象,ES6又添加...
    oWSQo閱讀 666評(píng)論 0 1
  • 我在這座城市待過(guò)一段時(shí)間,后來(lái)離開(kāi),在長(zhǎng)久的時(shí)間里總是難以從這座城市的回憶和想念里抽離出來(lái)。其實(shí)也不過(guò)是相距約13...
    我是長(zhǎng)今閱讀 899評(píng)論 0 2
  • 最近有個(gè)朋友感情受挫,低落了很久,我們輪番上陣的安慰,希望她能盡快從情傷中走出來(lái),畢竟上海這樣的城市生活,根本沒(méi)有...
    桃園王永興閱讀 1,132評(píng)論 0 1
  • 早起。在沙發(fā)上,我、嘟嘟和爸爸隱約聽(tīng)見(jiàn)了臥室里弟弟說(shuō)話(huà)的聲音:恐龍,恐龍……弟弟最?lèi)?ài)恐龍。看恐龍繪本百讀不厭,聽(tīng)恐...
    記錄我的生活閱讀 200評(píng)論 3 3

友情鏈接更多精彩內(nèi)容