这段代码为什么能输出

if('1'=='2'||'33'){
    console.log(2222)
}

这段代码为什么控制台可以打印出来??
阅读 3.1k
5 个回答

你分别验证下这两个判断条件就知道了啊
执行结果
在if里面只要不是null undefined '' false 其他字符串都是被强制转换成了true

'1'=='2'||'33'
==>
('1'=='2')||'33'
==>
false||'33'
==>'33'
==>true

console.log('1'=='2'||'33');//'33',转为Boolean 为 true

1)javascript中任何值都可以作为运算数执行逻辑运算,只需要其能转换为Boolean类型
2)javascript中
或逻辑运算符,在第1个操作数能装换为Boolean类型并为false的情况下,会计算并返回第2个运算操作数的值
与逻辑运算符, 在第1个操作数能装换为Boolean类型并为false的情况下,不继续计算第2个运算操作数,直接返回第1个操作数;如果第1个操作数能装换为Boolean类型并为true的情况,那么继续计算第2个运算操作数并返回

“33”转化为布尔值为true啊,所有if里面的语句是会被执行下去的。当然就会被打印出来的。

1.虽然在你这个问题之中,if中的表达式计算是从左到右的。但是我还是想说在看一个表达式的运算时,首先的注意运算符的优先级。关于运算符的优先级,可翻看《javascript》权威指南p66页。

2.嗯。现在进入正题,首先,'1'=='2',在经过类型转换后,判断得出false,接着进行false || '33'的运算,这里
注意对于逻辑运算符||,&&的返回值不是布尔值,切记。对于||运算符,左边判断出为假,会接着对'33'进行逻辑判断,这里你的切记当值为null、undefined、-0、+0、NaN、''时,计算出来都为false,其它情况都为true。所以对'33'进行逻辑判断,结果为true,并且返回'33',现在的表达式应该就是这样if('33'),然后进行布尔转换得出true,所以后面{}里的语句就不再执行。

|| 运算符将两边的变量转换为bool型,‘33’转换后是true

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题