-1

以下陈述之间是否有任何区别:

  1. if(newValue && newValue != '')
  2. if(newValue != '')

我在许多脚本中观察到表达式 1,但总是感到困惑。

请协助!

4

3 回答 3

3

如果(新价值 && 新价值!= '')。

这可以防止nullor的值undefined

在可能的''0、和中false,只有最后两个不等于(使用),需要额外的条件。undefinednull''!=

console.log(null && null != '') // null -> falsy
console.log(null != '') // truthy

var undef = void 0;

console.log(undef && undef != '') // undefined -> falsy
console.log(undef != '') // truthy
于 2012-12-28T14:11:50.320 回答
1

答案是否定的,

1)对于(newValue && newValue != ''),它检查newValue是否存在(非假值)并且它不为空

2) 对于if(newValue != ''), 它只检查 newValue 是否不为空

于 2012-12-28T14:09:00.450 回答
0

再薄一点,我认为值得添加到已经发布的答案中。
正如你,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);
}

如果您要省略domElementif 语句中的第一个,而只是 write domElement.addEventListener,那可能null.addEventListener与引发TypeError的写入相同(因为您试图访问原始值的属性)

于 2012-12-28T14:59:11.263 回答