<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    憨厚生

    ----Java's Slave----
    ***Java's Host***

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      165 隨筆 :: 17 文章 :: 90 評論 :: 0 Trackbacks
    轉(zhuǎn) http://www.playgoogle.com/view.asp?id=58

    在JavaScript開發(fā)中,被人問到:null與undefined到底有啥區(qū)別?
        一時間不好回答,特別是undefined,因為這涉及到undefined的實現(xiàn)原理。于是,細想之后,寫下本文,請各位大俠拍磚。
        總所周知:null == undefined
        但是:null !== undefined
        那么這兩者到底有啥區(qū)別呢?
        請聽俺娓娓道來…

    null
        這是一個對象,但是為空。因為是對象,所以 typeof null  返回 ‘object’ 。
        null 是 JavaScript 保留關(guān)鍵字。
        null 參與數(shù)值運算時其值會自動轉(zhuǎn)換為 0 ,因此,下列表達式計算后會得到正確的數(shù)值:
    表達式:123 + null 結(jié)果值:123
    表達式:123 * null 結(jié)果值:0

    undefined
    undefined是全局對象(global)的一個特殊屬性,其值是未定義的。但 typeof undefined 返回 ‘undefined’ 。
          雖然undefined是有特殊含義的,但它確實是一個屬性,而且是全局對象(window)的屬性。請看下面的代碼:
        alert(’undefined’ in window);   //輸出:true
         var anObj = {};
         alert(’undefined’ in anObj);    //輸出:false

    從中可以看出,undefined是window對象的一個屬性,但卻不是anObj對象的一個屬性。

    注意:
    盡管undefined是有特殊含義的屬性,但卻不是JavaScript的保留關(guān)鍵字。
    undefined參與任何數(shù)值計算時,其結(jié)果一定是NaN。
    順便說一下,NaN是全局對象(global)的另一個特殊屬性,Infinity也是。這些特殊屬性都不是JavaScript的保留關(guān)鍵字!全局對象是預定義的對象,作為 JavaScript 的全局函數(shù)和全局屬性的占位符。通過使用全局對象,可以訪問所有其他所有預定義的對象、函數(shù)和屬性。全局對象不是任何對象的屬性,所以它沒有名稱。全局對象只是一個對象,而不是類。既沒有構(gòu)造函數(shù),也無法實例化一個新的全局對象。(感謝sunder同學的留言)

    提高undefined性能
    當我們在程序中使用undefined值時,實際上使用的是global對象的undefined屬性。
    同樣,當我們定義一個變量但未賦予其初始值,例如:
    var aValue;
    這時,JavaScript在所謂的預編譯時會將其初始值設(shè)置為對window.undefined屬性的引用,
    于是,當我們將一個變量或值與undefined比較時,實際上是與window對象的undefined屬性比較。這個比較過程中,JavaScript會搜索window對象名叫’undefined’的屬性,然后再比較兩個操作數(shù)的引用指針是否相同。
    由 于window對象的屬性值是非常多的,在每一次與undefined的比較中,搜索window對象的undefined屬性都會花費時 間。在需要頻繁與undefined進行比較的函數(shù)中,這可能會是一個性能問題點。因此,在這種情況下,我們可以自行定義一個局部的undefined變 量,來加快對undefined的比較速度。例如:


        function anyFunc()
        {
            var undefined;          //自定義局部undefined變量
            
            if(x == undefined)      //作用域上的引用比較
            
            
            while(y != undefined)   //作用域上的引用比較
            
        };

     

    其 中,定義undefined局部變量時,其初始值會是對window.undefined屬性值的引用。新定義的局部undefined變 量存在與該函數(shù)的作用域上。在隨后的比較操作中,JavaScript代碼的書寫方式?jīng)]有任何的改變,但比較速度卻很快。因為作用域上的變量數(shù)量會遠遠少 于window對象的屬性,搜索變量的速度會極大提高。
    這就是許多前端JS框架為什么常常要自己定義一個局部undefined變量的原因!



    posted on 2009-10-22 22:14 二胡 閱讀(236) 評論(0)  編輯  收藏 所屬分類: JS
    主站蜘蛛池模板: 亚洲无线码在线一区观看| 国产裸体美女永久免费无遮挡| 手机看片久久国产免费| 国产精品免费无遮挡无码永久视频| 亚洲精品无码久久久久久| 亚洲av日韩av无码av| 亚洲一区二区三区夜色| 激情综合亚洲色婷婷五月| 99久久国产亚洲综合精品| 亚洲国产成人精品无码区在线观看| 亚洲国产系列一区二区三区| 免费人成在线观看网站品爱网| 久久精品亚洲精品国产色婷 | 无码不卡亚洲成?人片| 美国毛片亚洲社区在线观看| 国产精品免费视频一区| 黄页网址在线免费观看| 久久亚洲综合色一区二区三区| 无码国产精品一区二区免费vr| 亚洲成av人片不卡无码| 四虎成人精品一区二区免费网站 | 美女被cao免费看在线看网站| 国产成人精品日本亚洲18图| 国产禁女女网站免费看| 国产免费播放一区二区| 久久亚洲私人国产精品vA| 最近最新中文字幕完整版免费高清| 在线看亚洲十八禁网站| 亚洲精品无码久久一线| 91免费国产在线观看| 黄页免费视频播放在线播放| 日韩亚洲人成在线综合日本| 国产2021精品视频免费播放| 亚洲av成人中文无码专区| 亚洲精品亚洲人成在线观看| 成年女人男人免费视频播放| WWW免费视频在线观看播放| 亚洲午夜在线一区| 亚洲?V无码成人精品区日韩| 三年片在线观看免费观看大全动漫 | 亚洲色无码专区一区|