以下陈述之间是否有任何区别:
if(newValue && newValue != '')
和if(newValue != '')
我在许多脚本中观察到表达式 1,但总是感到困惑。
请协助!
以下陈述之间是否有任何区别:
if(newValue && newValue != '')
和if(newValue != '')
我在许多脚本中观察到表达式 1,但总是感到困惑。
请协助!
如果(新价值 && 新价值!= '')。
这可以防止null
or的值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)对于(newValue && newValue != '')
,它检查newValue是否存在(非假值)并且它不为空
2) 对于if(newValue != '')
, 它只检查 newValue 是否不为空
再薄一点,我认为值得添加到已经发布的答案中。
正如你,OP,说:你已经多次看到现有代码中的第一个表达式,所以你可能已经看到了这样的事情:
if (foo && foo.bar)
{
foo.bar();
}
在这种情况下,这是为了避免某些浏览器出现错误。在大多数现代浏览器中访问 somehting likelocalStorage.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);
}
如果您要省略domElement
if 语句中的第一个,而只是 write domElement.addEventListener
,那可能null.addEventListener
与引发TypeError的写入相同(因为您试图访问原始值的属性)