文章目录
一、JS 逻辑运算符 (也叫短路运算)
js中为我们提供了三种逻辑运算符: 或 ||
、 与 &&
、 非 !
。这三个都是针对布尔值进行的,如果不是布尔类型,则需要将他转换为布尔类型,然后在进行相应的运算。
如果一个值可以被转换为true
,那么这个值就是所谓的 truthy,如果可以被转换为false
,那么这个值就是所谓的falsy。
尽管 &&
和 ||
运算符能够使用非布尔值的操作数,但它们依然可以被看作是布尔操作符,因为它们的返回值总是能够被转换为布尔值,如果要显式地将它们的返回值或者表达式转换为布尔值,可以使用双重非运算符即 !!
或者 Boolean() 构造函数
。
🔔🔔 JS中的6个假 :0、""、null、false、undefined、NaN都会判为false,其它都为true
🌟 1、逻辑或 ||
||
: OR ,逻辑或, expr1 || expr2 ,若 expr1 可转换为 true 则返回 expr1 ,否则返回 expr2 。
可以对符号两侧的数据进行 或 运算。当两个数据都为false时,才会返回false;当两个数据中有一个为true时,就会返回一个true。
js中的 "或"
为短路或,即当两个数据中,只要第一个为true,就不会看第二个数;但当第一个为false时,就需要看第二个值,才能知道结果。
只要
||
前面为 false,不管||
后面是 true 还是 false,都返回|| 后面的值
;
只要||
前面为 true , 不管||
后面是 true 还是 false,都返回|| 前面的值
。
总结:真前假后 === > 一真则真
// 逻辑 或 示例
console.log(true || true); // 结果: true (第1个为true, 则返回第1个值)
console.log(false || true); // 结果: true (第1个为false, 则返回第2个值)
console.log(true || false); // 结果: true (第1个为true, 则返回第1个值)
console.log(false || (3 === 4)); // 结果: false (第1个为false, 则返回第2个值, 而 3 === 4 为false)
console.log("Cat" || "Dog"); // 结果: "Cat" (第1个为true, 则返回第1个值)
console.log(false || "Dog"); // 结果: "Dog" (第1个为false, 则返回第2个值)
console.log("Cat" || false); // 结果: "Cat" (第1个为true, 则返回第1个值)
console.log("" || false); // 结果: false (第1个为false, 则返回第2个值)
console.log(false || ""); // 结果: "" (第1个为false, 则返回第2个值)
✳️ 寻找第一个 truthy 的值
||
逻辑或运算符的一个很重要的用法就是寻找第一个 truthy 的值,这个操作的使用频率非常高,通常用来赋值默认值。
// 寻找第一个 truthy 的值
let val0 = 0, val1 = 1, val2 = 2;
let result = val0 || val1 || val2;
console.log(result); // 结果: 1
// 设定默认值
let v1 = 0;
let result_default = v1 || 1;
console.log(result_default); // 结果: 1
🌟 2、逻辑与 &&
&&
: AND ,逻辑与, expr1 && expr2 ,若 expr1 && expr2 可转换为 true 则返回 expr2 ,否则返回 expr1 。
可以对符号两侧的数据进行 与 运算。当两个数据都为true时,则会返回true;只要有一个为false,则就会返回一个false。
js中的 "与"
为短路与,两个数据中 当第一个数据为false时,就不会就看第二个值,当第一个数据为true时,则需要看第二个数据才能知道结果。
只要
&&
前面为 false,不管&&
后面是 true 还是 false,都返回&& 前面的值
;
只要&&
前面为 true , 不管&&
后面是 true 还是 false,都返回&& 后面的值
。
总结:假前真后 === > 一假则假
// 逻辑 与 示例
console.log(true && true); // 结果: true (第1个为true, 则返回第2个值)
console.log(false && true); // 结果: false (第1个为false, 则返回第1个值)
console.log(true && false); // 结果: false (第1个为true, 则返回第2个值)
console.log(false && (3 === 4)); // 结果: false (第1个为false, 则返回第1个值)
console.log("Cat" && "Dog"); // 结果: "Dog" (第1个为true, 则返回第2个值)
console.log(false && "Dog"); // 结果: false (第1个为false, 则返回第1个值)
console.log("Cat" && false); // 结果: false (第1个为true, 则返回第2个值)
console.log("" && false); // 结果: "" (第1个为false, 则返回第1个值)
con