为什么除0之外的所有数字都在JavaScript中传递if语句?

时间:2015-11-27 15:24:17

标签: javascript

这是我一直想知道的事情。根据MDN,在JavaScript中“if语句在指定条件为真时执行语句”。那么为什么这会通过声明?

var a = 7;
if( a ) {
    alert('true');
} else {
    alert('false');
}

变量既不是真也不是假,那为什么它会警告“真”而不是仅仅跳过整个if语句?

5 个答案:

答案 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为undefinednull,则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为假,任何其他值为真。