首先我想说明一下=
,==
和===
之间的区别
true === 1
。第一个用于将右侧值分配给左侧变量,第二个用于比较两个值的等效性,第三个不仅用于等效性而且还用于类型比较(即{{1将返回false
)。
所以,只要您看到if (... = ...)
,我就知道几乎,作者很有可能使用==
。
那就是说,我不完全理解这些脚本会发生什么:
var a = 5;
if (a = 6)
console.log("doop");

if (true == 2)
console.log('doop');

根据此Javascript type equivalency table,true
相当于1
,但不是0
或-1
。因此,我觉得第二个脚本不输出任何内容(至少,它不在我的Chrome v58.0.3029.110中)。
那么为什么第一个脚本输出到控制台但第二个脚本不输出?第一个脚本if
声明正在评估什么?
我挖掘了我的C#知识以帮助我理解,但是在C#中你无法编译if (a = 5) Console.WriteLine("doop");
因此我必须通过if (Convert.ToBoolean(a = 5))
明确地将它强制转换为bool但是这样才有意义它会评估为true,因为根据MSDN的文档,如果提供的值不是Convert.ToBool
,则0
返回true。所以这对我没什么帮助,因为在JS中只有1
和true
相等。
答案 0 :(得分:1)
与==
进行抽象相等比较和从数字值执行简单类型转换为布尔值之间存在差异。在布尔值和数字之间进行==
比较时,布尔值在比较之前转换为0或1 。因此在
if (true == 2)
值true
首先转换为1
,然后与2
进行比较。
在像
这样的类型转换中if (x = 2)
将数字转换为布尔值,以使任何非零值为true。也就是说,值2
已分配给x
,整个表达式的值为2
。然后将其作为布尔值作为评估if
语句的一部分进行测试,因此转换为true
,因为2
不是0
。
评估为布尔false
的各种值为0
,NaN
,""
,null
,undefined
,当然还有{ {1}}。作为布尔值测试时,任何其他值为false
。(例如在true
表达式中)。
答案 1 :(得分:0)
为什么if语句中的赋值等于true?
它没有。分配被评估为分配的任何值。
此表达式为真值:
a = true
但这个表达式是假值:
b = false
无论你是否将其置于if
声明中,都是如此。