检查是否为null或未定义

7
尽管JavaScript的nullundefined之间存在语义差异,但很多时候它们可以被视为相同。检查一个值是否为null或undefined的首选方式是什么?

目前我正在执行以下操作:

if (typeof value === "undefined" || value === null) {
    // do something
}

这段话相当冗长。当然,我可以创建一个函数并随处导入,但是我希望有更好的方法来实现这个目标。

此外,我知道

if (value == null) {
}

能够完成90%的工作,除非数值为零、假或其他可能导致难以发现的错误的隐式值。


如果您想测试特定的值,您需要冗长一些...尽管您可以缩短它,if (value === undefined || value === null) { - Jaromanda X
通常情况下,您根本不需要进行防御性的空值检查。但是如果没有看到更多的代码,我无法回答您的问题。请放大视野,向我们展示更全面的情况。 - Mulan
1
可能是重复的问题:如何确定变量是“未定义”还是“空值”? - Angel Politis
我认为常用的方法是 typeof a === "undefined" - ismnoiet
是的,@T.J.Crowder,你说得对。 - ismnoiet
显示剩余2条评论
2个回答

29

Also, I know that

if (value == null) {
}

Will get the job done 90% of the time, unless value is zero... or false... or a number of implicit things that can cause obscure bugs.

不,它始终能够完成工作。唯一的值是== null的是nullundefined0 == null 是错误的。 "" == undefined 是错误的。 false == null 是错误的。等等。你把== null和“falsiness”混淆了,这是两码事。
但这并不意味着编写代码时期望每个人都知道这一点是一个好主意。您已经在使用的代码中有一个完美清晰的检查。无论您选择编写value == null还是当前正在使用的显式检查(或if(value === undefined || value === null))都是风格和内部约定的问题。但是,value == null确实可以做到您要求的:检查value是否为nullundefined
有关 == 的详细信息,请参见此处:抽象相等比较

2
谢谢TJ,我实际上把事情搞混了。 - Bruno Brant
尽管这是正确的JavaScript代码,但像jslint或eslint这样的lint检查器仍可能会抱怨它,尽管大多数都有某种配置设置来允许使用“==”来测试null,例如https://github.com/eslint/eslint/issues/910。 - Glenn Lawrence

0

underscore js有一个函数可以实现这个功能:_.isUndefined()

参考链接:https://underscorejs.org/#isUndefined

isUndefined _.isUndefined(value)
如果value是undefined则返回true。

例如:
_.isUndefined(window.missingVariable);
=> true

lodash也有一个类似的函数。参见https://lodash.com/docs/4.17.11#isUndefined

两者都有类似的isNull函数。

我认为这些函数对于其他人知道正在测试什么很有用。


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