|| 和 && 首先会从左到右对第一个操作数执行条件判断,如果其不是布尔值就先进行 ToBoolean 强制类型转换,然后再执行条件判断。
1.逻辑与 &&
如果第一个操作数条件判断结果为 true 就返回第二个操作数的值,如果为 false 就返回第一个操作数的值。
【注】如果一个值可以转换为true,则该值就是所谓的truthy。如果一个值可以转换为false,则该值就是所谓的falsy
console.log(true && false); //false
console.log(0 && true); //0
console.log(1 && 2); //2
console.log(2 && 0); //0
console.log('' && 'foo') //empty string
可以转换为false的表达式有:
false;null;NaN;+0,-0,0n;- 空字符串(
""或''或``) undefined
2.逻辑或 ||
如果第一个操作数条件判断结果为 true 就返回第一个操作数的值,如果为 false 就返回第二个操作数的值。
console.log(false || true); //true
console.log(1 || 2); //1
console.log(0 || 2); //2
console.log('' || 'foo') //foo
3. && 和 || 优先级
AND运算符的优先级高于OR运算符,这意味着&&运算符在||运算符之前执行
【注意】|| 和 && 返回它们其中一个操作数的值,而非条件判断的结果