<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      js便簽筆記(9)——解讀jquery源碼時記錄的一些知識點

       

      近來一直利用業余時間在看jquery2.1.1源碼,大約看了兩千行了。平時看的時候,做了一些筆記,貼出來分享。

       

      1. Array.prototype.slice.call 可以將偽數組轉化為真正的數組

      其實,這里所謂的“偽數組”就是有length屬性,并且有“0”、“1”、“2”等這些屬性的對象,如下代碼:

      var obj = {
                  0: "A",
                  1: "B",
                  2: "C",
                  length: 3
              };
              var slice = [].slice;
              console.log(slice.call(obj));

      這里打印的結果就是一個真正的數組:

      另外,我們平時所寫的 $('div') ,其實也是這種偽數組,可以看一下:

      jquery源碼中有一個方法是用來判斷是否是偽數組的,其中就是根據對象是否有length屬性,并且對象的[length - 1]屬性有沒有值,來判斷的。這樣判斷會排除掉一個特殊的類型——String,string有length屬性,但是它的確不是偽數組。

       

      上面代碼中,slice.call不僅能將偽數組轉化成真正的數組,還能想數組的slice一樣,截取元素。如下:

      打印的結果可想而知:

       

      2. window對象還有一個“window”屬性

       jquery源碼中,判斷一個對象是否是window的時候,用以下方法來判斷:

       return obj.window === window;

      用瀏覽器監測以下window對象的細節,會發現,window對象下確實還有一個window對象,而且是一個無限循環的結構。

       

      3.  快捷方法

      第一:

       

      第二:

      將一個對象強制轉換為與之對應的bool類型,可用: !!obj

      相反,如果轉換成一直相反的bool類型,可用: !obj

       

      4. === 與 ==

      === 是嚴格相等,不會進行類型轉換,而 == 是不嚴格相等,會進行類型轉換。有些js的書中,建議開發人員永遠不要用 == 或者 != 。

      但是jquery源碼中,有用到“==”或者“!=”的情況 —— 判斷 undefined 和 null 的時候。

      5. 重寫了 toString()

      有些對象類型重寫了 toString 方法,因此要獲取這個對象的名稱,就不能簡單的用 .toString() ,而是用 Object.prototype.toString.call

      var a = [1, 2];
      console.log(a.toString());   // 1,2
      console.log(Object.prototype.toString.call(a));   // [Object Array]

       

      6. Object( 'str' ) —— String強制類型轉換為Object

       將一個字符串強制類型轉換成object之后,將會返回一個標準的偽數組對象。

      Object( 'abc' )  -->  String {0: "a", 1: "b", 2: "c", length: 3}

       

      7. jQuery的each函數,最大的優點

      each函數相比于for循環,最大的改進在于封閉了獨立的函數作用域。

      先看一段for循環的代碼:

                  console.log("current this", this);
      
                  var $divs = $("div"),
                      index = 0,
                      length = $divs.length;
      
                  for (; index < length; index++) {
                      console.log(index, this);
                      var j = 200;
                  }
      
                  console.log(j);

      打印的結果如下:

      打印結果可以看出:for循環里面的語句塊,和外面的作用域相同;最可怕的是 for 循環里面定義的變量,在外面可以識別。 別傷心,這就是js的一個“特點”。

       

      為了解決這個問題,我們再看看each函數的代碼:

                  console.log("current this", this);
      
                  var $divs = $("div");
      
                  $divs.each(function (index, elem) {
                      console.log(index, this);
                      var x = 100;
                  });
                  console.log(x);

      打印結果如下:

      很容易看出,each函數中的作用域,和外部作用域不同,而且each函數中定義的變量完全是局部變量,外面不可獲取。這正式我們想要的!

       

      另外,大家還肯能會發現,each比較類似與 for ... in 。 for...in 是迭代器模式,比 for(i=0;i<length;i++)要方便很多。但是除了上面提到了作用域之外,each和for...in就完全一樣了嗎? 當然不是!

      以上兩段代碼,結果卻大相徑庭。為何? 因為 for...in 會遍歷一個對象的隱式原型元素,而 each 則像for(i=0;i<length;i++)一樣中規中矩。

       

      8. call和apply的參數傳遞不同

      他倆的傳參方式不同可能大家都知道,說一個具體的例子吧,jquery中用到的。

      var arr = [5, 6, [1, 2], [3, 4]];
      console.log(Array.prototype.concat.call([], arr));     // [5, 6, [1, 2], [3, 4]]
      console.log(Array.prototype.concat.apply([], arr));    // [5, 6, 1, 2, 3, 4]

      以上代碼,輸出的結果完全不一樣。看明白這一點,才能說明你真正理解了兩者傳參的不同。

       

      ---------------------------------------------------------------

      以上是本次全部內容。jquery還會繼續往下看,筆記也會繼續整理。再有新內容,再分享。

       

      posted @ 2014-06-06 21:23  王福朋  閱讀(2633)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 91亚洲国产成人久久蜜臀| 强奷乱码中文字幕| 精品视频在线观看免费观看| 亚洲日韩日本中文在线| 亚洲欧美综合人成在线| 中文字幕亚洲国产精品| 久久婷婷成人综合色| 苍井空一区二区三区在线观看| 成人无码午夜在线观看| 情欲少妇人妻100篇| 日韩有码中文字幕一区二区| 国产欧美一区二区日本加勒比| 成人国产精品中文字幕| 精品国产午夜理论片不卡| 毛片一区二区在线看| 久久91精品牛牛| 亚洲精品色哟哟一区二区| 午夜亚洲www湿好爽| 91国产自拍一区二区三区| 亚洲精品一区二区动漫| 久久99精品久久久久久不卡| 日韩 一区二区在线观看| 野外做受三级视频| 依依成人精品视频在线观看 | 亚洲精品久久久久国色天香| 野花韩国高清电影| 国产成年女人特黄特色大片免费 | 久热这里只有精品6| 国内精品久久人妻无码妲| 岛国最新亚洲伦理成人| 国产女同疯狂作爱系列| 国产精品人成视频免费播放| 色午夜久久男人操女人| 丰满无码人妻热妇无码区| 精品久久综合日本久久网| 日韩精品一区二区三区激情视频 | 亚洲视频欧美不卡| 亚洲中文字幕国产精品| 乱人伦中文字幕成人网站在线| 国产精品一区二区三区黄| 中文字幕亚洲制服在线看|