乐趣区

JavaScript随记-Null和Undefined

刚学了一些 Markdown 的基础语法,试着用一下。

相关文档:Markdown 基本语法配合基本使用


相同点:

  • nullundefined 都是 js 的基本数据类型
    扩展:JS 的 6 种基本数据类型

    • Boolean
    • String
    • Number
    • Symbol
    • Null
    • undefined
  • nullundefined 都是 falsy 值
    扩展:JS 的 6 种 falsy 值

    • 0
    • false
    • “” (空字符串)
    • NaN (Not a Number)
    • undefined
    • null

不同点:

let i = null;
console.log(i);
// null
let j;
console.log(j);
// undefined

可见:
null 代表变量有值,值为 , 且该值是通过 变量赋值 获得的;
undefined 代表声明了变量,但没有为其赋值。

综上:

undefined == null;
// true
undefined !== null;
// true

而且:

typeof undefined;
// "undefined"
typeof null;
// "object"

常见应用场景:

  1. ===(严格等于)和 ==(等于)分别在何时使用:

    我们都知道 == 在做条件判断时,会强制转换用于比较的两个值的类型;而在实际开发中,只有一种情况需要用 ==,其他情况都用 === 即可

    if (obj.a == null) {
      // 这里相当于 obj.a === null || obj.a === undefined;
      // 这也是 jquery 源码中推荐的写法
    }
  2. ES6 函数默认参数的实现:
    结合上文,null 是有值的,且 null 的值为 ,通过赋值赋给变量

    let logHi = (param = 'hello') => {console.log(param);
    };
    
    /* 默认值生效 */
    logHi();
    // "hello"
    
    /* 赋值调用 */
    logHi('world');
    // "world"
    
    /* undefined 时, 默认值生效 */
    logHi(undefined);
    // "hello"
    
    /* null 作为值, 赋值调用 */
    logHi(null);
    // null
    
    /* NaN 作为值, 赋值调用 */
    logHi(NaN);
    // NaN

    倘若函数这样写:

    let consoleHi = (param) => {
      param = param || 'hello';
      console.log(param);
    };
    
    /* 默认值生效 */
    consoleHi();
    // "hello"
    
    /* 赋值调用 */
    consoleHi('world');
    // "world"
    
    /* undefined 时, 默认值生效 */
    consoleHi(undefined);
    // "hello"
    
    /* null 作为值为 falsy */
    consoleHi(null);
    // "hello"
    
    /* NaN 作为值为 falsy */
    consoleHi(NaN);
    // "hello"

参考文献:JavaScript — Null vs. Undefined

退出移动版