在JavaScript中测试空值和未定义值的较短方法?

在JavaScript中测试空值和未定义值的较短方法?,javascript,Javascript,我在读一本书,书中说,虽然可以通过执行以下操作来测试变量是否已定义且是否有值: if(myVar != null && myVar != undefined) { ... } 这被认为是“糟糕的风格”,因为null和undefined都是错误的值,我们可以通过使用更简洁的if构造更容易地检查变量是否有值 if(myVar) { ... } 但这让我感到困惑,因为虽然null和undefined确实是假值,但它们并不是唯一的假值。换句话说,在我看来,前一个if语句说,“

我在读一本书,书中说,虽然可以通过执行以下操作来测试变量是否已定义且是否有值:

if(myVar != null && myVar != undefined) {
  ...
}
这被认为是“糟糕的风格”,因为
null
undefined
都是错误的值,我们可以通过使用更简洁的
if
构造更容易地检查变量是否有值

if(myVar) {
  ...
}
但这让我感到困惑,因为虽然
null
undefined
确实是假值,但它们并不是唯一的假值。换句话说,在我看来,前一个
if
语句说,“只要变量不为null或未定义,就运行代码,而后一个
if
语句说,“只要变量不为false,就运行代码。”。“假设
myVar==0
,则前者
if
语句将运行,而后者
if
语句将不运行。因此,这两个
if
语句是不等价的。我错了吗

编辑:如果你想看到他们的确切措辞,这里有一个屏幕抓图:

要检查变量是否为
null
未定义
,请使用非单一相等运算符检查
null

if (myVar != null) {

}
然而,最好的做法是使用三重等于来更加明确

if (!(myVar === null || typeof myVar === 'undefined')) {

}
比较

(undefined == null) => true
(null == null) => true
(undefined === null) => false
(null === null) => true
(0 == null) => false
(0 == undefined) => false
(0 === null) => false
(0 === undefined) => false
(false == null) => false
(false == undefined) => false
(false === null) => false
(false === undefined) => false
(null) => false
(undefined) => false
(0) => false
(false) => false

演示:

没有捷径可走。首先需要在null之前检查undefined,因为

!myVar
假设myVar是先前定义的,并将抛出

Uncaught ReferenceError: myVar is not defined
如果您从未定义该变量

仅当您从某些外部源提取数据并且不确定变量是否存在时,才需要此检查。如果您已经在代码中的某个地方定义了它,并且正在等待用户输入来设置它,那么您可以使用

!myVar

这仅仅是因为您知道它已经被定义了,因为您在代码的前面已经定义了它。

是的,两者都不是彼此的副本。这就是你想要的?你是对的,这是一个选择的问题。编写代码时,请考虑最常见的用例。没有其他方法可以查明变量是空的还是未定义的。显然,您显示的两个代码片段是不同的。如果
myvar
变量是一个数字,那么可以使用
isNaN
函数。@Manwal不,这不是我想要的全部。既然它们不是彼此的“复制品”(等价物),为什么这本书说可以用一个代替另一个?@yroc你确定这正是你的书所说的吗?如果是这样,这本书就错了。