辨析Undefined类型和Null类型

1 辨析Undefined类型和Null类型

1.1 Undefined类型

​ Undefined类型有且仅有一个字面量undefined,表示的是一个变量不存在。

​ undefined常出现在以下4种场景:

​ ① 使用只声明而未初始化的变量时,会返回undefined。

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

​ ② 获取一个对象的某个不存在的属性时,会返回undefined。

        var obj = {
            school: 'ahu'
        }
        console.log(obj.age);  //undefined

​ ③ 函数没有明确的返回值时,却在其他地方使用了返回值,会返回undefined。

        function foo() { }
        console.log(foo());  //undefined

​ ④ 函数调用时,使用未赋值的形参,回返回undefined。

        function foo(param1, param2) {
            console.log(param2);
        }
        foo(1); //undefined
1.2 Null类型

​ Null类型有且仅有一个字面量null,表示一个空指针对象,所以使用typeof检测null时会返回"object"的原因。

​ null常出现在以下3种场景:

​ ① 声明某个变量是为了以后保存某个值,则在声明时就将其赋值为null。

        var obj = null;
        function foo() {
            return {
                school: 'ahu'
            };
        }
        obj = foo();

​ ② JavaScript在获取DOM元素时,如果没有获取到指定的元素对象,会返回null。

        console.log(document.querySelector('#noId'));  //null

​ ③ 在使用正则表达式进行捕获时,如果没有捕获结果,会返回null。

        console.log('test'.match('a'));  //null
1.3 Undefined和Null的异同

(1)相同点

  • Undefined和Null两种数类型都有且仅有一个字面量,分别是undefined和null。

  • Undefined和Null两种数类型在转换为Boolean类型的值时,都会转换为false。

  • Undefined类型派生自Null类型,所在在非严格相等的情况下,两者是相等的,如下代码:

            console.log(null == undefined);  //true
    

(2)不同点

  • null是关键字,而undefined是一个全局变量,即挂载在window对象上的一个变量,并不是关键字。

  • 在使用typeof运算检测时,会返回不同的结果。

            console.log(typeof undefined);  //undefined
            console.log(typeof null);       //object
    
  • 在通过call调用toString()函数时,会返回不同的结果。

            console.log(Object.prototype.toString.call(undefined)); //[object Undefined]
            console.log(Object.prototype.toString.call(null));      //[object Null]
    
  • 字符串拼接时,null会转换为字符串"null",undefined会转换为"undefined"。

  • 进行数值运算时,undefined会转换为NaN,无法参与计算;null会转换为0,可以参与计算

            console.log(undefined + 0); //NaN
            console.log(null * 100);    //0
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值