逻辑表达

时间:2012-12-28 14:05:33

标签: javascript

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

  1. if(newValue && newValue != '')
  2. if(newValue != '')
  3. 我在许多剧本中观察过表达式1,但总是感到困惑。

    请协助!

3 个答案:

答案 0 :(得分:3)

  

if(newValue&& newValue!='')。

这可以防范nullundefined的值。

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

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 (因为你试图访问原始值的属性)