「译」JavaScript 的怪癖 2:两个「空值」:undefined 和 null

本文探讨JavaScript中undefined与null的区别及应用。undefined由语言自身分配,未初始化变量默认为undefined;null则由开发者指定,用于明确表示缺失值。文章还介绍了如何检查变量是否为空,并提供了几种不同的实现方式。
摘要由CSDN通过智能技术生成

原文:JavaScript quirk 2: two “non-values” – undefined and null

译文:「译」JavaScript 的怪癖 2:两个「空值」:undefined 和 null

译者:SingleSeeker


此文是javascript 的 12 个怪癖(quirks)系列的第二篇。 感谢@SingleSeeker对本文的翻译。

以下是正文:

对于“空值”或“空引用”,大多数编程语言只有一个值。比如,在 Java 中用的是null。 但是在 Javascript 中却有两个特殊的值:undefinednull。 他们基本上是相同,但用法上却略有些不同。 在这个系列教程的最后,我会解释一下在 ECMAScript 6 中的一些变化。

undefined是被语言本身所分配的。 如果一个变量还没有被初始化,那么它的值就是undefined:

> var foo;
> foo
undefined

同理,当缺失参数时 JavaScript 会分配一个undefined

> function id(x) { return x }
> id()
undefined

null是被开发者用来明确指出某个值是缺失的, 例如,对于JSON.stringify():

> console.log(JSON.stringify({ first: 'Jane' }, null, 4))
{
    "first": "Jane"
}

校检:一个变量是否有值?

如果你想知道变量v是否有值,正常情况下,你需要同时检验undefinednull。 幸运的是两个值都是false 型。 因此,只用一个判断,就可以同时检验这两项是否为真:

if (v) {
    // v 有值
} else {
    // v 没有值
}

在本系列的第 5 部分——关于函数参数的处理——你将会看到更多的上面校检例子。 有一点要注意的是:这个检查也会把false,-0,+0,NaN与 '' 当成“空值”。 如果这不是你想要的,那么就不能使用上面的校检方法了。

你有两个选择。

有些人提倡使用不等于(!=)来校检 v 既不是undefinednull:

if (v != null) {
    // v 有值
} else {
    // v 没有值
}

不过,这要求你要明白!=认为null只等于它自己或是undefined。 我喜欢用更有可读性的!==:

if (v !== undefined && v !== null) {
    // v 有值
} else {
    // v 没有值
}

性能方面,所有在这个章节中提到的这三个校检基本是相同的。 所以,最后用哪个取决于你的需求还有你的品味。 一些压缩工具甚至用!=重写了最后一条校检。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值