以下陈述之间是否有任何区别:
if(newValue && newValue != '')
和if(newValue != '')
我在许多剧本中观察过表达式1,但总是感到困惑。
请协助!
答案 0 :(得分:3)
if(newValue&& newValue!='')。
这可以防范null
或undefined
的值。
在可能的''
,0
,false
,undefined
和null
中,只有最后两个不等于''
(使用!=
),需要额外的条件。
console.log(null && null != '') // null -> falsy
console.log(null != '') // truthy
var undef = void 0;
console.log(undef && undef != '') // undefined -> falsy
console.log(undef != '') // truthy
答案 1 :(得分:1)
答案是否定,
1)对于(newValue && newValue != '')
,它检查newValue是否存在(非假值)并且它不为空
2)对于if(newValue != '')
,它只检查newValue是否为空
答案 2 :(得分:0)
我认为值得添加到已发布的答案中 正如你所说,OP说:你已经多次看到现有代码中的第一个表达式,所以你可能已经看过这样的事情:
if (foo && foo.bar)
{
foo.bar();
}
在这种情况下,这是为了避免某些浏览器中的错误。在大多数现代浏览器中访问某些类似localStorage.doesNotExist
的浏览器不会引发错误,但并非所有浏览器都支持这一点,所以我们首先检查localStorage
对象是否存在,如果存在,是否可以将属性解析为一个非虚假的价值。
相同的逻辑适用于对象的方法,在各种浏览器中可能会有所不同:
var domElement = document.getElementById('foobar');//might not exist, though
if (domElement && domElement.addEventListener)
{//does element exist && does it have a method called addEventListener
domElement.addEventListener('click', functionRef, false);
}
else if (domElement && domElement.attachEvent)
{
domElement.attachEvent('onclick', functionRef);
}
如果要省略if语句中的第一个domElement
,只需编写domElement.addEventListener
,那么 可能与编写null.addEventListener
的{{1}}相同 TypeError (因为你试图访问原始值的属性)