JavaScript:理解 Undefined Null

Undefined
Null

1.Undefined

Undefined类型只有一个值,就是特殊值undefined。当使用var或let声明了变量但没有初始化时,就相当于给变量赋予了undefined值:
let message;
console.log(message == undefined);
//等同于
let message = undefined;
console.log(message == undefined);

一般来说,永远不用显式地以undefined来初始化。增加这个特殊值的目的就是为了正式明确空对象指针和未初始化变量的区别。

包含undefined值的变量跟未定义变量是有区别的。

let message;
console.log(message);//undefined
console.log(age);//报错

第一个console.log会指出变量message的值,即"undefined"。
第二个console.log要输出一个未声明的变量age的值,因此会导致报错。

对于未声明的变量,只能执行一个有用的操作,就是对它调用typeof。

let message;
console.log(typeof message);//undefined
console.log(typeof age);//undefined

无论声明还是未声明,typeof返回的都是字符串"undefined"。逻辑上讲这是对的,因为虽然严格来讲这两个变量存在根本性的差异,但它对任何一个变量都不可能执行什么真正的操作。

undefined是一个假值。因此,如果需要,可以用更简洁的方式检测它。不过要记住,也有很多其他可能的值同样是假值。所以一定要明确自己想检测的就是undefined这个字面值,而不仅仅是假值。

let message;//变量声明,只是值为undefined
if(message){
//这个块不会被执行
}
if(!message){
//这个块会执行
}
if(age){
//这里会报错
}

2.Null

Null类型同样只有一个值,即特殊值null。逻辑上讲,null值表示一个空对象指针,这也是给typeof传一个null会返回"object"的原因。
let car=null;
console.log(typeof car)//"Object"

在定义将来要保存对象值的变量时,建议使用null来初始化,不要使用其他值。这样,只要检查这个变量的值是不是null就可以知道这个变量是否在后来被重新赋予了一个对象的引用,如:

if(car ! =null){
//car是一个对象的引用
}

undefined值是由null值派生而来,因此ECMA-262将它们定义为表面上相等,如下面的例子所示:

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

用等于操作符(==)比较null和undefined始终返回true。但要注意,这个操作符会为了比较而转换它的操作数。
即使null和undefined有关系,它们的用途也是完全不一样的。如前永远不必显式地将变量值设置为undefined。但null不是这样的,任何时候只要变量要保存对象,而当时有又没有那个对象可保存,就要用null来填充该变量。这样就可以保持null是空对象指针地语义,并进一步将其与undefined区分开来。

null是一个假值。因此,如果需要,可以用更简洁的方式检测它。不过要记住,也有很多其他可能的值同样是假值。所以一定要明确自己想检测的就是null这个字面值,而不仅仅是假值。

let message=null;//变量声明,只是值为undefined
let age;
if(message){
//这个块不会被执行
}
if(!message){
//这个块会执行
}
if(age){
//这个块不会执行
}
if(!age){
//这个块会执行
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值