1. 程式人生 > >JavaScript - undefined與null的區分及最佳實踐

JavaScript - undefined與null的區分及最佳實踐

操作 boolean 強調 特殊屬性 fine 高級 不同 erro javascrip


主要參考

  • 《JavaScript高級程序設計》

ECMAScript中的六種數據類型

  • ECMAScript中包含六種數據類型

    • Undefined
    • Null
    • Boolean
    • Number
    • String
    • Object
  • 其中,Undefined類型和Null類型是唯二的僅有一個值的數據類型

運算符typeof

  • 通過typeof運算符可能返回如下六種可能的字符串:

    • "undefined"
    • "boolean"
    • "string"
    • "number"
    • "object"
    • "function"
  • 與ECMAScript中定義的六種數據類型比較,可發現如下差異點:

    • typeof null並不會返回"null"

      。這是因為,特殊值null被認為是一個空的對象引用,因此會返回"object"

    • 返回值中出現了"function",而函數並不是ECMAScript中定義的一種數據類型。實質上,在ECMAScript中函數也是對象,但函數確實有其特殊屬性,因此區分函數和其他對象是有必要的

Undefined類型定義及其最佳實踐

  • Undefined類型中的唯一值undefined,表示未初始化的變量

  • 註意:區分未初始化的變量尚未定義的變量

    var message;
    // var age;
    
    alert(message); // "undefined"
    alert(age); // ReferenceError: age is not defined
    • 但是,使用typeof操作符時,會有如下返回:

      var message;
      // var age;
      
      alert(typeof message); // "undefined"
      alert(typeof age); // "undefined"
  • 綜上,最佳實踐

    每次定義變量時都進行顯示初始化,那麽當typeof操作符返回"undefined"時,只能說明該變量尚未被聲明

Null類型定義及其最佳實踐

  • nullundefined的關系:

    alert(null == undefined); // true

    因為,實際上undefined是派生自null,但之所以區分是強調其各自的特殊指向

  • 上面說過,null

    的特殊意義在於表示空的對象引用(空對象指針),因此建議如下最佳實踐

    當一個意在保存對象的變量尚未實際真正保存對象時(剛聲明且暫未賦值),都應當明確地讓該變量保存null值:

    • 通過nullundefined來區分暫未賦值而實際意義不同的對象;
    • 僅需通過檢查null便可判定相應變量是否已保存了一個對象的引用。

JavaScript - undefined與null的區分及最佳實踐