如果第一部分为false,如何跳过(JavaScript if语句)的第二部分

时间:2015-04-21 01:58:27

标签: javascript if-statement

我有这段代码:

  if (window.content.document.getElementById("error-msg") != null )
  {
    if (window.content.document.getElementById("error-msg").offsetParent !== null) 
    {
...
    }
  }

可以用一个if语句写吗?

我尝试了以下内容......

if ( (window.content.document.getElementById("error-msg") != null) || (window.content.document.getElementById("error-msg").offsetParent !== null) ) {}

但是,它不起作用,并产生错误:

  

TypeError:window.content.document.getElementById(...)为null

2 个答案:

答案 0 :(得分:8)

常见的习惯用法就是像这样使用&&运算符

var errorMsg = window.content.document.getElementById("error-msg");

if (errorMsg && errorMsg.offsetParent) {
    ...
}

此处,JavaScript会先评估errorMsg,如果是Truthy,则会评估errorMsg.offsetParent部分。只有当&&中的两个表达式都是Truthy时,才会满足条件。

注意:如果正在测试的表达式为false0等,则Truthy评估将返回false(请参阅Falsy值列表{{ 3}})。所以,如果你想测试它们是不是null,那就明确地写一下,就像这样

if (errorMsg !== null && errorMsg.offsetParent !== null) {
    ...
}

另一方面,||运算符仅在第一个表达式为Falsy时才会计算第二个运算符。在你的情况下,如果

(window.content.document.getElementById("error-msg") != null) 

true,这意味着getElementById("error-msg")会返回null。由于第一个表达式被评估为Truthy,它会评估另一个表达式并有效地尝试检查

null.offsetParent !== null

这就是它失败的原因。

答案 1 :(得分:3)

也许你想用&&

if (a != null && b != null) {
    // Do something.
}