在条件语句内部,任何逻辑操作都将计算为布尔值,该值确定是否执行条件块。如下面的语句将确定IF语句将执行与否
if(null || 1){} // evaluates to boolean value
但是当分配给变量时,相同的条件语句将计算为Number值。考虑这个:
var x = null || 1 // x will become 1
我的另一个问题是null和1的顺序在这里是否重要?
什么决定条件操作何时变为布尔值或数字?
答案 0 :(得分:3)
它们都会产生同样的结果。但是,区别在于if
语句将值解析为布尔值:返回的1
被解析为布尔值。
> (null || 1)
1
> Boolean(1)
true
if(null || 1){}
只评估为if(1){}
,而if(true){}
的评估结果为1
,因为if
是真实的。
因此,没有确定性差异,false
语句只是将参数解析为布尔值,而变量定义只返回数字本身。
来自mozzila.org:
在JavaScript中,truthy值是在布尔上下文中计算时被视为true的值。所有值都是真实的,除非它们被定义为假(即
0
,""
,null
,undefined
,NaN
和{{1}除外})。 JavaScript在布尔上下文中使用类型强制
答案 1 :(得分:2)
在JavaScript中,1
是" truthy",这就是输入if
语句的原因。基本上,(null || 1)
始终评估为1
,但如果被强制,我们会说true
而不是false
。