如何确定变量是“未定义”还是“空”?

IT技术 javascript jquery variables null undefined
2021-01-25 15:17:43

我如何确定变量是undefined还是null

我的代码如下:

var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
  // DO SOMETHING
};
<div id="esd-names">
  <div id="name"></div>
</div>

但是如果我这样做,JavaScript 解释器就会停止执行。

6个回答

您可以使用抽象相等运算符的特性来执行此操作:

if (variable == null){
    // your code here.
}

因为null == undefined是真的,上面的代码会同时捕获nullundefined

@MichaelFever 这怎么行不通?将此复制粘贴到您的控制台中:const y = undefined; y == null;它应该返回true
2021-03-19 15:17:43
相关比较的现场示例lgtm。
2021-03-26 15:17:43
可能很棘手: undefined !== null--> true undefined == null --> true
2021-04-01 15:17:43
我正在尝试测试 firefox 中的 event 是否为 null 并且错误阻止了执行:“event is undefined”
2021-04-02 15:17:43
@ChrisStryczynski 在您评论的示例中,您声明为y常量,但您正在比较abc(不是y)。当我y通过console.log(y == null);Chrome 和 Firefox进行测试时,我得到了true结果。如果您遇到错误,那么您可能尝试使用赋值运算符=而不是比较==,因为const无法重新分配,因此返回错误是有意义的
2021-04-05 15:17:43

同时捕获null捕获的标准方法undefined是:

if (variable == null) {
     // do something 
}

-- 这 100% 相当于更明确但不那么简洁的:

if (variable === undefined || variable === null) {
     // do something 
}

在编写专业的 JS 时,类型相等和==vs的行为是===理所当然的因此,我们使用==并且仅与 进行比较null


再次编辑

建议使用 的评论typeof是完全错误的。是的,如果变量不存在,我上面的解决方案将导致 ReferenceError。这是一件好事。这个 ReferenceError 是可取的:它会帮助您在发布代码之前找到错误并修复它们,就像其他语言中的编译器错误一样。如果您正在处理您无法控制的输入,请使用try/ catch

您不应在代码中引用任何未声明的变量。

是的,因为你写的!==不是!=.
2021-03-18 15:17:43
-OP:关于这些比较“100% 等效”的声明是简单错误的,正如您在自己的编辑中指出的那样,第二个将导致 ReferenceError。至于断言:“您不应在代码中引用任何未声明的变量。” 真的吗?听说过可选参数吗? jsfiddle.net/3xnbxfsu
2021-03-26 15:17:43
如果在代码中根本没有定义或引用变量,这将导致 ReferenceError 并中断执行,使用 typeof 更安全。
2021-03-28 15:17:43
这更像是一个风格点。如果变量尚未在宣布所有,这是对作者的部分其实只是写不好。您应该知道您的变量是否已声明,这不应该是一个问题。但是是的,如果由于某种原因是这种情况,应该将其更改为window.variable而不仅仅是variable,这不会导致引用错误。应避免使用 typeof。
2021-04-05 15:17:43
@TimothyKanski 可选参数如果没有选择提供,则可能未定义,但它们绝对是声明的变量。它们被声明并具有值undefined,就像任何声明但未初始化的变量一样,即var someVar;因此您的论点并没有真正站得住脚
2021-04-07 15:17:43

结合以上答案,似乎最完整的答案是:

if( typeof variable === 'undefined' || variable === null ){
    // Do stuff
}

这应该适用于任何未声明或声明并显式设置为 null 或未定义的变量。对于任何具有实际非空值的声明变量,布尔表达式应评估为 false。

@Aerovistae 我认识到这typeof是一个运算符,而不是一个函数,所以它不需要括号,但我仍然感谢括号 - 只是为了阅读清晰。
2021-03-10 15:17:43
如果我错了,请纠正我,但第一个条件不是第二个的超集,因此第二个条件是多余的吗?
2021-03-10 15:17:43
直接检查 if(variable===undefined) 而不是使用 typeof 怎么样?
2021-03-24 15:17:43
这是一个更好的解决方案,因为正如@Rogue 指出的那样,可能未声明该变量。
2021-03-27 15:17:43
如果未声明变量,@ArjunU 将导致 ReferenceError。如果您不知道是否声明了变量,请使用上述解决方案。如果可以保证至少声明了变量,则可以使用variable == null
2021-04-04 15:17:43
if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}
我在 chrome 控制台中失败了... ReferenceError: 变量未定义,所以它可能有效,但不适合我...
2021-03-19 15:17:43
刚刚想通了,您可以将此注释添加/*jshint eqnull:true */到您的 JS 文档或函数的顶部,并且 JSHint 将停止警告您使用== null.
2021-03-19 15:17:43
以防万一有人认为这是另一个一半的答案,这实际上确实有效。undefined等于null
2021-04-01 15:17:43
它仅适用于已声明的变量,而不适用于可能会或可能不会声明的变量,这种情况很少见。(对于这种情况,您需要使用 typeof + 空检查)
2021-04-09 15:17:43
@Aerovistae 您能否指出一个明确指出==已损坏的参考资料if(variable == null)这个答案中的强制性对我来说完全有意义......
2021-04-09 15:17:43
if (typeof EmpName != 'undefined' && EmpName) {

如果 value 不是,则评估为 true:

  • 空值

  • 不明确的

  • NaN

  • 空字符串 ("")

  • 0

  • 错误的

这与if (EmpName). 如果它undefined已经是假的。
2021-03-13 15:17:43
如果未定义变量。那么 if(EmpName) 会抛出错误
2021-03-16 15:17:43
@Thamaraiselvam 我认为鲁迪可能是这个意思var EmpName; if (EmpName)定义了变量但未分配值的地方。
2021-03-16 15:17:43
请提供此 javascript 电子规范的参考
2021-04-06 15:17:43
我认为这是一种像野火一样蔓延的危险技术。因为很多被检查的变量可能是布尔值或数字。所以如果用户不完全理解后果,这是没有好处的。
2021-04-08 15:17:43