<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        javascript各種遍歷方式,有你不知道的黑科技

        來源:懂視網 責編:小采 時間:2020-11-27 20:30:24
        文檔

        javascript各種遍歷方式,有你不知道的黑科技

        javascript各種遍歷方式,有你不知道的黑科技:為了方便例子講解,現有數組和json對象如下var demoArr = ['Javascript', 'Gulp', 'CSS3', 'Grunt', 'jQuery', 'angular']; var demoObj = { aaa: '
        推薦度:
        導讀javascript各種遍歷方式,有你不知道的黑科技:為了方便例子講解,現有數組和json對象如下var demoArr = ['Javascript', 'Gulp', 'CSS3', 'Grunt', 'jQuery', 'angular']; var demoObj = { aaa: '

        為了方便例子講解,現有數組和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<len; i++) {
         if (i == 2) {
         // return; // 函數執行被終止
         // break; // 循環被終止
         continue; // 循環被跳過
         };
         console.log('demo1Arr['+ i +']:' + demo1Arr[i]);
         }
        })();

          關于for循環,有一下幾點需要注意

        for循環中的i在循環結束之后任然存在與作用域中,為了避免影響作用域中的其他變量,使用函數自執行的方式將其隔離起來()();

        避免使用for(var i=0; i<demo1Arr.length; i++){} 的方式,這樣的數組長度每次都被計算,效率低于上面的方式。也可以將變量聲明放在for的前面來執行,提高閱讀性

        var i = 0, len = demo1Arr.length;
        for(; i<len; 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<len);
        })();

          $.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 "CSS3"
        3 "Grunt"
        4 "jQuery"
        5 "angular"

          這里有很多需要注意的地方

        使用return 或者return true為跳過一次循環,繼續執行后面的循環

        使用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對象,可以調用jquery的方法進行dom操作

          使用for in 遍歷DOMList

          因為domList并非數組,而是一個對象,只是因為其key值為0,1,2... 而感覺與數組類似,但是直接遍歷的結果如下

        var domList = document.getElementsByClassName('its');
        for(var item in domList) {
         console.log(item, ':' + domList[item]);
        }
        // 0: <li></li>
        // 1: <li></li>
        // ...
        // length: 5
        // item: function item() {}
        // namedItem: function namedItem() {}

          因此我們在使用for in 遍歷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() {}() 三種函數自執行的方式^_^

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        javascript各種遍歷方式,有你不知道的黑科技

        javascript各種遍歷方式,有你不知道的黑科技:為了方便例子講解,現有數組和json對象如下var demoArr = ['Javascript', 'Gulp', 'CSS3', 'Grunt', 'jQuery', 'angular']; var demoObj = { aaa: '
        推薦度:
        標簽: 方法 你知道 js
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲AV无码专区国产乱码不卡| 图图资源网亚洲综合网站| 亚洲av无码一区二区三区天堂古代| 在线观看免费无码专区| 国产亚洲人成无码网在线观看| 三级毛片在线免费观看| 亚洲国产精品高清久久久| 久久国产乱子伦精品免费一 | 国产亚洲精品国产| 国产免费一区二区三区不卡| 亚洲精品无码久久一线| 国产一区二区三区免费观看在线 | 免费夜色污私人影院在线观看| 最好2018中文免费视频| 成人午夜亚洲精品无码网站| 中文字幕免费不卡二区| 久久亚洲AV无码精品色午夜麻豆| 91热久久免费精品99| 中文日韩亚洲欧美制服| 日本免费福利视频| 国产精品九九久久免费视频| 久久精品国产亚洲AV麻豆~| 日本免费一区二区三区 | 亚洲AV性色在线观看| 久久亚洲精品无码观看不卡| 久久久久国产免费| 亚洲国产精品白丝在线观看| 免费的一级片网站| 男女拍拍拍免费视频网站| 亚洲精品欧洲精品| 精品无码国产污污污免费| 拍拍拍无挡免费视频网站| 亚洲国产成人精品无码一区二区| 成人在线免费观看| 你懂得的在线观看免费视频| 亚洲成人黄色网址| 五月婷婷亚洲综合| 18禁黄网站禁片免费观看不卡| 美女被免费网站视频在线| 国产A在亚洲线播放| 国产在线观看免费完整版中文版|