在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你确定这正是你的书所说的吗?如果是这样,这本书就错了。