JavaScript - undefined与null的区分及最佳实践


主要参考

  • 《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便可判定相应变量是否已保存了一个对象的引用。

猜你喜欢

转载自www.cnblogs.com/JustBeZero/p/9651738.html