为什么和&& operator返回最后一个值(如果该语句为true)?
("Dog" == ("Cat" || "Dog")) // false ("Dog" == (false || "Dog")) // true ("Dog" == ("Cat" && "Dog")) // true ("Cat" && true) // true (false && "Dog") // false ("Cat" && "Dog") // Dog ("Cat" && "Dog" && true) // true (false && "Dog" && true) // false ("Cat" && "Dog" || false); // Dog
解决方法
想象
&&
in JavaScript这样(基于
es5 spec的ToBool)
function ToBool(x) { if (x !== undefined) if (x !== null) if (x !== false) if (x !== 0) if (x === x) // not is NaN if (x !== '') return true; return false; } // pseudo-JavaScript function &&(lhs,rhs) { // lhs && rhs if (ToBool(lhs)) return rhs; return lhs; }
现在你可以看到ToBool(“Cat”)是真的如此&&会给rhs哪个是“狗”,然后===正在做“狗”===“狗”,这意味着该行给出了真实.
为了完整,||运算符可以被认为是
// pseudo-JavaScript function ||(lhs,rhs) { // lhs || rhs if (ToBool(lhs)) return lhs; return rhs; }