为什么switch和if语句在Javascript中对待布尔值不同,令人困惑
Why switch and if statement in Javascript treat boolean different, confused
我有一个开关,如果在Javascript中出现问题,代码如下:
var a=0;
if(a){
console.log("a is true");
} else if(!a) {
console.log("a is false");
} else {
console.log("a is not true or false");
}
switch(a){
case true:
console.log("switch... a is true");
break;
case false:
console.log("switch... a is false");
break;
default:
console.log("switch... a is not true or false");
}
当我运行上面的代码时,我在控制台得到的结果让我很困惑:
a is false
switch... a is not true or false
我认为应该是这样的:
a is false
switch... a is false
有人知道为什么会这样吗?非常感谢大家的回答。
If(!0)的值为true。一般来说,if中任何非零的值都将计算为true,反之亦然。
但是对于switch 0将显式地检查大小写值,并且0既不是真也不是假,因此执行默认语句
0既不为真也不为假,但是
switch: 程序首先查找带有与expression值匹配的标签的case子句,然后将控制转移到该子句。
因为a=0
不匹配true
或false
。因此执行default
。
if-else: 如果指定的条件为真,则执行语句。如果条件为false,则执行另一条语句。
因为a=0
,所以!a
为真。这就是条件的计算方法。
相关文章:
- 如何从javascript/jquery中的复选框中获取布尔值
- KendoUI网格行过滤器,带有布尔值下拉列表
- php布尔值's小写AND大写和数字布尔值'可以接受
- select中布尔值的Angularjs ng值不起作用
- 由于布尔值的变化,Django视图中的字符串格式不正确
- MeteorJs Alded autoform,如何从布尔值复选框中获得所需值
- 将字符串动态转换为布尔值
- 将布尔值存储在隐藏字段中以进行表单处理
- 类型错误:布尔值不是 Angular 中登录函数的函数
- Yui Get 复选框返回数组而不是布尔值
- 为什么 1.2 == true 返回 false 如果布尔值 (1.2) 实际上是真的
- 为什么第一个将其视为布尔值,其次不将其视为布尔值
- 当值可能不是正确的布尔值时,如何测试 true
- jquery -ajax 不检查控制器的布尔值
- IF 条件下的布尔值导致 JavaScript 中的错误
- 带有布尔值的Javascript If语句
- 如何在JavaScript中的IF语句中使用具有布尔值的变量作为条件
- 在使用javascript的if语句中使用字符串作为布尔值是否存在任何缺陷
- 角ng-if数值布尔值
- 为什么switch和if语句在Javascript中对待布尔值不同,令人困惑