2016-09-11 64 views
5

为什么是不同的这2个条件语句:这些条件有什么不同?

错误:

if (myObj !== null && typeof myObj !== "undefined") 

正因为如此,你必须首先测试的typeof():

正确:

if (typeof myObj !== "undefined" && myObj !== null) 

我把这个关闭w3schools网站。根据w3schools,你必须首先测试typeof(),为什么这会有所作为。条件看起来是一样的

+7

这是一个很好的例子,为什么w3schools信息应该采取一粒盐。 – Pointy

+2

这不一样,因为&&运算符是短路的:当第一个条件是虚假时,第二个条件不被评估。 – raina77ow

+2

因为如果'myObj'没有被定义,你会得到一个错误,如果你不先用typeof检查它。 – adeneo

回答

6

第一个条件将抛出一个错误如果变量未申报。

ReferenceError: myObj is not defined

注意,& &操作者是短路,因此在第二状态下,所述myObj !== null表达不会被在所有如果MyObj中未定义评价。

有关详细信息,请参阅here

+1

如果对象是* undeclared *,它会引发错误;它可以被声明并且没有任何价值,然而,它不会抛出错误。 – Pointy

+0

但是我的答案是错的。我想我需要一个午睡:) – Pointy

+0

@你说得对,没有声明是正确的词使用。我编辑了我的答案。 –