这是我一直想知道的事情。根据MDN,在JavaScript中“if语句在指定条件为真时执行语句”。那么为什么这会通过声明?
var a = 7;
if( a ) {
alert('true');
} else {
alert('false');
}
变量既不是真也不是假,那为什么它会警告“真”而不是仅仅跳过整个if语句?
答案 0 :(得分:4)
"是真的"意味着"一个评估为真值的表达式" not"完全等于布尔对象true
"。
可以找到正式语言in the specification。
让exprRef成为评估Expression的结果。
如果 ToBoolean(GetValue(exprRef))为true,则返回结果 评估第一个声明。
否则,
返回结果 评估第二个声明。
答案 1 :(得分:1)
在Javascript中,以下值始终是假的:
false
0 (zero)
"" (empty string)
null
undefined
NaN (a special Number value meaning Not-a-Number!)
所有其他值都是真实的,包括" 0" (引号为零)," false" (引号中为false),空函数,空数组和空对象。
如果您想与没有类型转换的 true 进行比较,请尝试a === true
。
答案 2 :(得分:0)
在JavaScript中if(var)
不仅评估布尔值,还评估已定义/初始化或未定义的变量。
例如,如果var为undefined
或null
,则if
将其评估为false
答案 3 :(得分:0)
如前所述,它正在对变量执行布尔测试。 布尔值是二进制;这就是说,唯一可能的值是0和1,其中true = 1,false = 0。
你硬编码到if语句中的值是7 = 0111,所需要的只是其中一个数字是' 1'让它通过测试。
它与字母的工作方式相同,除了if语句将字母从ASCII转换为二进制:" A" = 0100 0001(在ASCII中注册为65。http://www.asciitable.com/)另一方面,没有输入将返回错误的声明。
答案 4 :(得分:-2)
在电脑上,一切都是数字。也是布尔值,通常只有一位:0或1。
但计算机使用多个位来存储数据,因此布尔值大于0或1,但也需要255,42或25,同时仍需通过简单测试。
因此按惯例,0为假,任何其他值为真。