js中a?b:c和a&&b||c有什么区别

结果有区别吗?效率有区别吗?

发现自己sb了……一开始打错字,后来又没注意到b的问题,补充下吧,!b为false

阅读 18.6k
6 个回答

前者b不参与判断。后者b参与判断。

根据逻辑来理解啊。 a?b:c 只判断a a真返回b否则返回c
a&&b||c 先判断a a真=》判断b b真 返回b b假 返回c

            a假=>返回c

a ? b : c 的意思是,如果 a 的值判定为 true,则表达式返回 b 的值;否则,返回 c 的值。

a && b || c 是逻辑计算,返回整个表达式的值,只不过出于优化的角度,如果前面的计算已经确定了结果,就会提前中止,此时返回的可能是中间某个表达式的值。

所以当 a = 1, b = 0, c = 1 的时候,就会返回 c 的值,此时和上面的二元运算符结果不同。

a?b:c // true时返回b;false时返回c
a&&b||c // a,b都不是假值,返回b;a,b其中有一个是假值,返回c

也就是说,当b为假值(false, null, 0, "", undefined 和 NaN)时,两者结果会不同。
而最长出现的比如( a = 1 ) && console.log( a ) || 2,则最终会依次显示 1 和 2,因为console.log( a ) return 为 undefined。

让我重新温习了一下JavaScript的运算符,棒

a && b 相当于 a ? b : a

x || c 相当于 x ? x : c

所以合在一起

a && b || c 相当于 a ? b ? b : c : c

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