美文网首页
null和undifined区别

null和undifined区别

作者: 扶得一人醉如苏沐晨 | 来源:发表于2022-11-14 09:27 被阅读0次

    在JavaScript中,将一个变量赋值为undefined或null,感觉没啥区别,都表示“无”;但在实际应用中,远非如此,这两个之间区别的不明确可能会导致一些问题。

    相似性

    (1)undefined和null在if语句中,都会被自动转为false,加!转换为true,==运算符对于两者比较是相等的。

    if (!undefined) 
        console.log('undefined is false');
    // undefined is false
    
    if (!null) 
        console.log('null is false');
    // null is false
    
    undefined == null
    // true
    

    (2)在JavaScript中,只有六个falsy值,null和undefined都包含在六个falsy值中,当进行逻辑判断时所有的Falsy值均为false。

    false
    0
    '' (空字符串,''和""一样)
    null
    undefined
    NaN
    

    除了这六个值,JavaScript中的任何其他值都被认为是truthy值,当进行逻辑判断时均为true。

    差异性

    (1)数据类型区别

    undefined类型只有一个值,undefined;null类型只有一个值,null。

    也就是说undefined值和null值分别属于不同的数据类型,并且这两个数据类型都只有一个值,使用“typeof”运算符判断类型。

    console.log(typeof undefined);  // undefined
    console.log(typeof null);   // object 
    

    (2)转为数值区别

    JavaScript的最初版本为了更好区分这两个值,是这样设定的:null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。

    var a1= 5 + null;
    console.log(a1)  // 5
    
    var a2= 5 + undefined;
    console.log(a2)  // NaN
    

    (3)null !== undefined

    如上所见,null和undefined不同,但有一些相似之处, 因此,ECMAScript规范规定null不严格等于undefined。

    null !== undefined  // true
    
    null === undefined  // false
    

    在JavaScript中,==适用松散相等,意味着我们在将它们转换为通用类型后比较两个值。

    只要记住null==undefined会返回true,因为它们是类似的值;但null===undefined会返回false,因为它们是不同类型的值。

    实际用法

    但是,上面的区分,在实践中都不常用。实际上,null和undefined被视为几乎同义的,只有一些细小的差别。
    null表示一个变量被人为的设置为空对象,而不是原始状态,即该处不应该有值。一般会在以下 2 种场景中出现:

    (1) 利用document.getElementById(‘XXX’) 寻找一个不存在的元素,将返回null。

    console.log(null == document.getElementById('notExistElement'))  // true
    

    (2) 作为对象原型链的终点。

    Object.getPrototypeOf(Object.prototype)  // null
    

    undefined表示一个变量自然的、最原始的状态值,就是此处应该有一个值,但是还没有定义。一般会在以下 4 种场景中出现:

    (1)声明了一个变量,但没有赋值,就等于undefined。

    var a
    console.log(a); // undefined
    

    (2) 函数定义了形参,但没有传递实参,该参数等于undefined。

    //函数定义了形参 a 
    function f(a) {
         console.log(a); // undefined 
    }  
    f(); //未传递实参
    

    (3)访问对象上不存在的属性,该属性的值为undefined。

    var  a = new Object();
    a.p // undefined
    

    (4)函数没有返回值时,默认返回undefined。

    var a = f();
    a // undefined
    

    所以,在实际使用过程中,为了保证变量所代表的语义,不要对一个变量显式的赋值 undefined,当需要释放一个对象时,直接赋值为 null 即可。

    最后引用玉伯大大对null和undefined的解释:

    值类型的“虚无”用undefined,引用类型的“虚无”,用null。

    相关文章

      网友评论

          本文标题:null和undifined区别

          本文链接:https://www.haomeiwen.com/subject/hexitdtx.html