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规范(好奇)中的任何地方都有记录?
答案 0 :(得分:3)
在Javascript中,除false
,0
,undefined
,null
,{{NaN
, if (data === true) // Is it really true?
,if (typeof data === 'undefined') // Is the variable undefined?
之外,所有内容都是“真实的”(或使用Javascript用语更为精确) 1}}和空字符串。
为避免混淆使用:
{{1}}
和
{{1}}
答案 1 :(得分:1)
检查是否 truthy 。
在JavaScript中,除false
,0
,""
,undefined
,null
和NaN
外,一切都很简洁。
因此,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