为何调用JavaScript函数solveThis(2,3)返回true而非false?
为什么传入2和3时solveThis函数返回true?
问题出在第一个if条件的逻辑解析上:
if (i || j === 1) { return true }
这里要注意JavaScript的运算符优先级——===的优先级远高于||,所以这个条件会被引擎解析成 (i) || (j === 1),而不是你可能误以为的 (i || j) === 1。
当你传入i=2时,2在JavaScript的布尔判断中属于真值(truthy)(所有非0、非null、非undefined、非空字符串等的值都会被判定为true)。而||是逻辑或运算符,只要左侧表达式为真,整个条件就直接成立,不会再去计算右侧的j === 1。
所以第一个if条件直接满足,函数立刻返回true,完全不会进入后面的else if或else分支。
如果你的本意是判断i等于1 或者 j等于1,需要把条件修正为i === 1 || j === 1,否则单独的i会把所有非假值都纳入判断范围。
内容的提问来源于stack exchange,提问作者jamie finster
相关产品推荐
相关产品推荐

