我有这段代码:
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
答案 0 :(得分:8)
常见的习惯用法就是像这样使用&&
运算符
var errorMsg = window.content.document.getElementById("error-msg");
if (errorMsg && errorMsg.offsetParent) {
...
}
此处,JavaScript会先评估errorMsg
,如果是Truthy,则会评估errorMsg.offsetParent
部分。只有当&&
中的两个表达式都是Truthy时,才会满足条件。
注意:如果正在测试的表达式为false
,0
等,则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.
}