【问题标题】:Checking for null or undefined检查 null 或 undefined
【发布时间】:2016-07-28 23:00:22
【问题描述】:

虽然 JavaScript 的 nullundefined 之间存在语义差异,但很多时候它们可以被视为相同。检查值是 null 还是 undefined 的首选方法是什么?


现在我正在做以下事情:

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

这很冗长。当然,我可以为此创建一个函数并在任何地方导入,但我希望有更好的方法来实现这一点。

另外,我知道

if (value == null) {
}

将在 90% 的时间内完成工作,除非值为零……或错误……或许多可能导致模糊错误的隐含事物。

【问题讨论】:

  • 如果你想测试特定的值,你需要详细说明......不过,你可以缩短一点,if (value === undefined || value === null) {
  • 您通常根本不需要进行防御性空值检查。但是如果没有看到您的更多代码,我无法回答您的问题。缩小画面,向我们展示更大的画面。
  • 我觉得常用的是typeof a === "undefined"方式
  • @hamism: 嗯,除了null 是假的。

标签: javascript node.js


【解决方案1】:

我也知道

if (value == null) {
}

将在 90% 的时间内完成工作,除非值为零……或错误……或许多可能导致模糊错误的隐含事物。

不,它可以 100% 地完成工作。 == null 的唯一值是 nullundefined. 0 == null 是 false。 "" == undefined 是假的。 false == null 是假的。等等。您将== null 与虚假相混淆,这是完全不同的事情。

不过,这并不是说编写希望每个人都知道的代码是个好主意。您可以很好地、清晰地检查您已经在使用的代码。无论您选择写value == null 还是您当前正在使用的显式(或if (value === undefined || value === null)),都是风格和内部惯例的问题。但是value == null 确实按照您的要求进行:检查valuenull 还是undefined

==的详细信息在这里:Abstract Equality Comparison

【讨论】:

  • 谢谢 TJ,其实我把事情搞糊涂了。
  • 虽然这是正确的 javascript,但 jslint 或 eslint 之类的 lint 检查器可能仍会抱怨它,尽管大多数都会有某种配置设置以允许 == 用于针对 null 进行测试,例如github.com/eslint/eslint/issues/910
【解决方案2】:

下划线js有这个_.isUndefined()的功能

来自https://underscorejs.org/#isUndefined

isUn​​defined _.isUndefined(value)
如果 value 未定义,则返回 true。

示例:
_.isUndefined(window.missingVariable);
=> 是的

lodash 也有类似的功能。见https://lodash.com/docs/4.17.11#isUndefined

两者对于isNull 也有类似的功能。

我发现这些功能对于其他人了解正在测试的内容很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 2016-08-20
    • 2013-08-13
    相关资源
    最近更新 更多