Javascript - 如果语句检查表达式和定义声明?这令人困惑

时间:2012-03-09 16:06:51

标签: javascript

var boolTrue = true;
var randomObject;

if (boolTrue)
// this will fire

if (randomObject)
// this will fire, because the object is defined

if (!objectNotDefined)
// this will fire, because there is no defined object named 'objectNotDefined'

来自C ++和C#背景,我非常熟悉基本的if(表达式)语法。但是,我认为拥有两个表达式(true / false)并且对象存在也是一个表达式是不可读的。因为现在如果我看到如下所示的函数,我不知道进来的数据是对象(存在/未定义的检查)还是布尔值。

function(data) {
   if (data)
      // is this checking if the object is true/false or if the object is in existence?
}

这就是这样吗?我的意思是,无论如何都要轻易阅读这个?此外,JS规范(好奇)中的任何地方都有记录?

4 个答案:

答案 0 :(得分:3)

在Javascript中,除false0undefinednull,{{NaN if (data === true) // Is it really true? if (typeof data === 'undefined') // Is the variable undefined? 之外,所有内容都是“真实的”(或使用Javascript用语更为精确) 1}}和空字符串。

为避免混淆使用:

{{1}}

{{1}}

答案 1 :(得分:1)

检查是否 truthy

在JavaScript中,除false0""undefinednullNaN外,一切都很简洁。

因此,true将传递,任何对象(也是空对象/数组/等)。

请注意,如果您的意思是“声明但未定义”,则您的第三条评论为真 - 一个从未声明的变量会在访问时抛出ReferenceError。声明的,未定义的变量(var something;)是undefined(因此,不是真的),所以如果你否定它,它确实会通过这个条件。

答案 2 :(得分:1)

您可以单独检查(非)存在:

if ( typeof variable == 'undefined' ) {
  // other code
}

但是,您显示的语法通常用作更短的形式,并且在大多数用例中都足够了。

答案 3 :(得分:1)

以下值在条件语句中等效于false:

false
null
undefined
The empty string ”
The number 0
The number NaN