JS中六種數據類型(二)——Null


    Null類型是第二個只有一個值的數據類型,這個特殊的值是null,從邏輯角度來看,null值表示一個空對象指針,而這也正是使用typeof操作符檢測null值會返回“object”的原因,如下面的例子所示:

    var car =null;
    alert(typeof null);  //object(其實這是JavaScript最初實現的一個錯誤,后來被ECMAScript沿用下來)
如果定義的變量准備在將來用戶保存對象,那么最好將該變量初始化為null而不是其他值。這樣一來,只要直接檢查null值就可以知道相應的變量是否已經保存了一個對象的引用,如下面的例子:
 
    if(car != null){
    //對car執行某些操作
    }
 
實際上,undefined值是派生自null值的,因此ECMA-262規定對他們的相等測試要返回true:
 
    alert(null == undefined)  //true
 
    這里,位於null和undefined之間的相等操作符(==)總是返回true,不過要注意的是,這個操作符出於比較的目的會轉換其操作數。
    盡管null和undefined有這樣的關系,但它們的用途完全不同,如前所述,無論什么情況下都沒有必要把一個變量的值顯式地設置為undefined,可視同樣的規則對null卻不適用。換句話說,只要意在保存對象的變量還沒有真正保存對象,就應該明確地讓該變量保存null值。這樣做不僅可以體現null作為空對象指針的慣例,而且也有助於進一步區分null和undefined。
    在程序中如何判斷變量是否為null。
    以下是不正確的方法: 
 
1、  var exp = null;
    if (exp == null)
    {
        alert("is null");
    }
    exp 為 undefined 時,也會得到與 null 相同的結果,雖然 null 和 undefined 不一樣。
    注意:要同時判斷 null 和 undefined 時可使用本法。
 
2、  var exp = null;
    if (!exp)
    {
        alert("is null");
    } 
    如果 exp 為 undefined,或數字零,或 false,也會得到與 null 相同的結果,雖然 null 和二者不一樣。
    注意:要同時判斷 null、undefined、數字零、false 時可使用本法。
 
3、   var exp = null;
    if (typeof exp == "null")
    {
        alert("is null");
    }
    為了向下兼容,exp 為 null 時,typeof null 總返回 object,所以不能這樣判斷。
 
4、  var exp = null;
    if (isNull(exp))
    {
        alert("is null");
    }
    VBScript 中有 IsNull 這個函數,但 JavaScript 中沒有。
--------------------------------------------------------------------------------
    以下是正確的方法: 
1、   var exp = null;
    if (!exp && typeof exp != "undefined" && exp != 0)
    {
        alert("is null");
    }
    typeof exp != "undefined" 排除了 undefined; 
    exp != 0 排除了數字零和 false。
    更簡單的正確的方法:
 
2、  var exp = null;
    if (exp === null)
    {
        alert("is null");
    }
--------------------------------------------------------------------------------
盡管如此,我們在 DOM 應用中,一般只需要用 (!exp) 來判斷就可以了,因為 DOM 應用中,可能返回 null,可能返回 undefined,如果具體判斷 null 還是 undefined 會使程序過於復雜。
 
 
歡迎關注微信公眾號:wcs290130——JavaScript那些事兒。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM