javascript遍歴方式の詳細

6329 ワード

例の説明を容易にするために,既存の配列とjsonオブジェクトは以下の通りである.

var demoArr = ['Javascript', 'Gulp', 'CSS3', 'Grunt', 'jQuery', 'angular'];
var demoObj = {
 aaa: 'Javascript',
 bbb: 'Gulp',
 ccc: 'CSS3',
 ddd: 'Grunt',
 eee: 'jQuery',
 fff: 'angular'
};

for
例を直接見ることができて、使いすぎて、簡単です.

(function() {
 for(var i=0, len=demoArr.length; i 
 

forループについては、以下の点に注意してください.
  • forサイクル中のiは、サイクル終了後に任意に作用ドメインに存在し、作用ドメイン中の他の変数に影響を及ぼすことを避けるために、関数自己実行方式を用いてそれを分離する()
  • forの使用を避ける(var i=0;i
  • 
    var i = 0, len = demo1Arr.length;
    for(; i 
     
  • ループから飛び出す方法は、次のような
  • がある.
    return関数実行終了breakループ終了continueループ完全インスタンススキップ
    for in
    for(var item in arr|obj){}配列とオブジェクトの遍歴に使用できます
  • 配列を巡る場合、itemはインデックス値を表し、arrは現在のインデックス値に対応する要素arr[item]
  • を表す.
  • オブジェクトを巡回する場合、itemはkey値、arrはkey値に対応するvalue値obj[item]
  • を表す.
    
    (function() {
     for(var i in demoArr) {
     if (i == 2) {
     return; //        
     // break; //      
     // continue; //      
     };
     console.log('demoArr['+ i +']:' + demoArr[i]);
     }
     console.log('-------------');
    })();
    

    for inについては、以下の点に注意してください.
  • forループとfor inループでは、i値はいずれもループ終了後に保持される.したがって、関数の自己実行を使用することは避けられます.
  • はreturn,break,continueジャンプループを用いてもforループと一致するが,returnについては関数体ではreturnが関数実行終了を表し,ループ外のコードであっても下へ実行しないことに注意する必要がある.breakはループを終了するだけで、後のコードは実行されます.
  • 
    function res() {
     var demoArr = ['Javascript', 'Gulp', 'CSS3', 'Grunt', 'jQuery', 'angular'];
    
     for(var item in demoArr) {
     if (item == 2) {
     return;
     };
     console.log(item, demoArr[item]);
     }
     console.log('desc', 'function res'); //    
    }
    
    

    forEach
    demoArr.forEach(function(arg){})パラメータargは配列の各項目の要素を表し、例は以下の通りである.
    
    demoArr.forEach(function(e) {
     if (e == 'CSS3') {
     return; //      
     // break; //   
     // continue;//   
     };
     console.log(e);
    })
    

    具体的には以下の注意点があります
    forEachはオブジェクトを遍歴できませんforEachはIEで使用できません.firefoxとchromeはこの方法を実現しましたforEachはbreakを使用できません.continueはループから飛び出します.returnを使用すると、効果はforループでcontinueを使用することと一致しますdo/while
    関数の具体的な実装方法は以下の通りですが、continueを使用する場合、i++を後ろに置くと、i++の値はずっと変わらず、最後にデッドサイクルに陥ることに注意してください.だからdo/whileを使うには慎重にしなければなりません.
    do/whileを使用して配列を巡る//直接whileを使用することは推奨されません
    
    (function() {
     var i = 0,
     len = demoArr.length;
     while(i < len) {
     if (i == 2) {
     // return; //        
     // break; //      
     // continue; //       ,           ,i      ,           ,  !!
     };
     console.log('demoArr['+ i +']:' + demoArr[i]);
     i ++;
     }
     console.log('------------------------');
    })();
    
    // do while
    (function() {
     var i = 0,
     len = demo3Arr.length;
     do {
     if (i == 2) {
     break; //      
     };
     console.log('demo2Arr['+ i +']:' + demo3Arr[i]);
     i++;
     } while(i 
     

    $.each
    $.each(demoArr|demoObj,function(e,ele))は、eがインデックス値またはkey値を表し、eleがvalue値を表す配列およびオブジェクトを巡回するために使用できます.
    
    $.each(demoArr, function(e, ele) {
     console.log(e, ele);
    })
    

    出力は
    0「Javascript」1「Gulp」2「CSS 3」3「Grunt」4「jQuery」5「angular」ここには注意すべき点がたくさんあります
  • returnまたはreturn trueを使用して、1回のループをスキップするために、後続のループ
  • を実行し続ける.
  • return falseを使用してループの実行を終了するが、関数実行
  • を終了することはない.
  • breakとcontinueを使用してループ
  • をスキップすることはできません.
  • サイクルにおけるthis値出力は、以下のように
  • である.
    
    console.log(this);
    //String {0: "C", 1: "S", 2: "S", 3: "3", length: 4, [[PrimitiveValue]]: "CSS3"}
    
    console.log(this == ele);
    // true
    
    

    上のthis値について、遍歴してみます
    
    $.each(this, function(e, ele) {
     console.log(e, ele);
    })
    
    // 0 c
    // 1 s
    // 2 s
    // 4 3
    
    

    なぜlengthと[[primitiveValue]]は遍歴しなかったのですか?突然、「javascript高度プログラミング」で答えが見つかりました.javascriptの内部属性で、オブジェクトデータ属性のEnumerableをfalseに設定するという意味です.
    
    //   length     
    console.log(Object.getOwnPropertyDescriptor(this, 'length'));
    // Object {value: 4, writable: false, enumerable: false, configurable: false}
    

    $.eachの$(this)はthisとは違いますが、遍歴結果は同じで、テストコードに印刷して$(selecter)を見ることができます.each
    DOMListの遍歴に特化
    
    $('.list li').each(function(i, ele) {
     console.log(i, ele);
     // console.log(this == ele); // true
     $(this).html(i);
     if ($(this).attr('data-item') == 'do') {
     $(this).html('data-item: do');
     };
    })
    
  • i:シーケンス値ele:現在巡回中のDOM要素
  • のみ
  • this現在遍歴されているDOM要素は、jQueryメソッド
  • を呼び出すことができません.
  • $(this)=$(ele)現在要素を巡るjqueryオブジェクトは、dom操作
  • のためにjqueryメソッドを呼び出すことができる.
    for inを使用してDOMListを巡回する
    domListは配列ではなくオブジェクトなので、key値が0,1,2...配列と似ているような感じがしますが、直接遍歴した結果は次のようになります.
    
    var domList = document.getElementsByClassName('its');
    for(var item in domList) {
     console.log(item, ':' + domList[item]);
    }
    // 0: 

  • //1:

  • //...
    //length: 5
    //item: function item() {}
    //namedItem: function namedItem() {}

  • そこでforinを用いてdomListを巡回する場合,domListを配列に変換する必要がある.
    
    var res = [].slice.call(domList);
    for(var item in res) {}

    このようなオブジェクトには関数の属性argumentsオブジェクトもあり、もちろん文字列も遍歴可能であるが、文字列の他の属性のenumerableがfalseに設定されているため、遍歴の結果は配列と同じであり、この問題を心配する必要はない.マイナー補完
    もしあなたが関数を書く人がいることに気づいたら、慌てないで、彼が背が高いとは思わないでください.
    
    +function(ROOT, Struct, undefined) {
     ... 
    }(window, function() {
     function Person() {}
    })
    

    ()(), !function(){}()+function(){}()の3つの関数が自己実行される方法.
    以上が本文のすべての内容で、みんなの学習に役立つことを望みます.