如何检查变量是否不为空?

366
我知道在JavaScript中有以下两种方法来检查一个变量是否不为null,但我不确定哪种是最佳实践。
那么我应该使用哪种方法呢?
if (myVar) {...}
或者
if (myVar !== null) {...}

可能是如何在JavaScript中检查空字符串?的重复问题。 - T.Todua
10个回答

476
它们并不等价。第一个语句会在myVar为真值(即在条件语句中求值为true)时执行后面的代码块,而第二个语句在myVar不为null的任何值时执行。
在JavaScript中,唯一的非真值(也称假值)有以下几种:
  • null
  • undefined
  • 0
  • ""(空字符串)
  • false
  • NaN

请注意保留原文中的HTML标签。

99

以下是如何测试变量是否不为NULL:

if (myVar !== null) {...}

如果myVar不是NULL,则执行该代码块... 如果myVar未定义或为false或0NaN或其他任何值,则也将执行。


1
对于那些想知道的人... 这不会检查空字符串 ("") 和未定义。请参考我的 fiddle:https://jsfiddle.net/b0tm7yaf/ - Barrosy

59
  • 只有当myVar等于false、0、“”、null、undefined或NaN时,您的if(myVar){ code }代码块才不会被执行,或者您从未定义变量myVar(这时还会停止执行并抛出异常)。
  • 只有当myVar !== null时,您的if(myVar !== null){ code }代码块才不会被执行,或者您从未定义它(将抛出异常)。

所有内容请参考:此处

if语句

enter image description here

== (其否定形式为 != )

enter image description here

=== (其否定形式为 !== )

enter image description here


53

47
这个检查实际上并不安全。如果“myvar”是0、false或其他任何假值,测试将失败(如果您只想检查非null)。因此,只有在变量永远不可能有其他假值时,才使用这个检查来检查非null值。 - Werzi2001
4
链接已失效。我在这里找到了一个看起来是帖子的副本:http://appendto.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-2/不过很奇怪,因为以利亚的帖子(和示例代码)会暗示他是作者,但他没有被列为那里的作者... - thepaulpage
2
看起来那个网站已经不存在了。如果您能在帖子本身中包含信息,而不仅仅是外部链接,那将会很有帮助。 - apraetor
如果存在值但为0(零),则此方法将无效。 - zmechanic

9

我刚刚遇到了另一个可能的情况。

我进行了一次ajax调用,以字符串格式返回了空数据。我必须像这样检查它:

if(value != 'null'){}

因此,null是一个字符串,它显示为"null"而不是真正的null。

编辑:应该理解我不是在将其作为正确方法出售。我遇到了一种情况,这是唯一可行的方法。我不确定为什么...也许编写后端的人错误地呈现了数据,但无论如何,这是现实生活中的情况。看到有些人明白它并不完全正确就对它进行投票降低分数,而另一些人却从中获得帮助,这让人感到沮丧。


1
解析你的值而不是与“null”字符串进行比较。 - Bergi
5
是的,我进行了投票否决,因为我认为这不是正确的解决方案。在ajax调用的情况下,你应该更好地使用 value = JSON.parse(value) ,然后使用简单和合适的 value != null 测试。 - Bergi
5
我理解这是一种可行的解决方案,但我认为这并不是一个好的建议,所以请尊重我的反对票。 - Bergi
1
我会点踩是因为 != 'any-thing-you-want' 也返回 true !!! 你得到了想要的结果,但实际上它并没有处理你想要的情况 :) - Michael Durrant
1
@FlatCat 请注意,投票反对并不是针对您个人的批评,而其他人的赞同也与此无关。这纯粹是关于该答案是否在投票者看来对他人有用和有帮助。 - Michael Durrant

4

如果 (0) 意味着 false,如果是 (-1 或任何非 0 的数字) 意味着 true。以下数值不为真,包括 null、undefined、0、""(空字符串)、false 和 NaN。

永远不要使用像 id 这样的数字类型。

if (id) {}

对于可能取值为0的id类型,我们不能使用 if (id) {},因为 if (0) 会被视为 false、无效,而我们希望它作为真实有效的id号码被识别。

因此,对于id类型,我们必须使用以下代码:

if ((Id !== undefined) && (Id !== null) && (Id !== "")) {

} else {

}

对于其他字符串类型,我们可以使用if (string) {},因为null、undefined和空字符串都会被评估为false,这是正确的。

if (string_type_variable) { }

如果“0”是唯一不适用于“if(id){}”场景的情况,您可以始终执行类似于“if(id || id === 0)”这样的操作,这比您的解决方案更简洁,并且应该具有相同的效果。 - Vaclav Pelc

3
有时,即使没有定义,准备也是更好的选择。为此,我使用了typeof
if(typeof(variable) !== "undefined") {
    //it exist
    if(variable !== null) {
        //and is not null
    }
    else {
        //but is null
    }
}
else {
    //it doesn't
}

1
如果myVar为空,则if块不会执行,否则将执行。 if (myVar != null) {...}

不是字符串“null”,而是特殊值null - Micah Walter

-2
与其使用多个条件语句,不如使用以下解决方案。
if(![false, 0, "", null, undefined, NaN].includes(myVar)){

   // It's not a null value

}

此答案被标记为低质量。请阅读如何撰写好的答案?。虽然这个代码块可能回答了OP的问题,但如果加上一些解释,这个答案会更有用。请解释它是做什么的,以及它与现有答案的不同之处/优势。 - H3AR7B3A7

-5

你列出的这两个条件语句并没有优劣之分,使用取决于具体情况。顺便提一下,你在第二个例子中有一个拼写错误。感叹号后面应该只有一个等号。

第一个例子确定myVar中的值是否为true,并执行{...}内的代码。

第二个例子评估myVar是否不等于null,如果是,则执行{...}内的代码。

我建议你深入了解条件语句的更多技巧。一旦你熟悉了它们,就可以决定何时需要使用它们。


13
第二个例子中可能不是笔误。第二个等号=是至关重要的,并且对于问题有很大的影响。也许您不知道JavaScript中存在!=====操作符的存在? - Tim Down
1
谢谢指出。我立刻认为那是一个打字错误,但现在想起来了,这是我很久以前见过但已经忘记的东西。 - THE DOCTOR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接