JS-逻辑运算符的与,或,非
1.非
所谓非,就是取反,非真即假,非假即真。
非运算符不仅仅只能用于布尔值,其他数据类型也是可以的,如下:
1.如果操作数是一个对象,返回false
2.如果操作数是一个空字符串,返回true
3.如果操作数是一个非空字符串,返回false
4.如果操作数是数值0,返回true
5.如果操作数是任意非0数值(包括Infinity), 返回false
6.如果操作数是null,返回true
7.如果操作数是NaN,返回true
8.如果操作数是undefined, 返回true
2.与
作用于两到多个值,并且只有所有的操作数都是真值时,才为true。
JavaScript里面的与存在短路现象,具体说明如下:
1.第一个操作数为真:会进入第二个操作数的判断,且无论第二个操作数真假,都会返回第二个操作数。
2.第一个操作数为假:不会进入第二个操作数的判断,直接返回第一个操作数。
实例:
console.log(3 && 5);//5 console.log("Hello" && 20);//20 console.log("Hello" && false);//false console.log("" && "shoe");//"" console.log("Hello" && '');//''
经典题:
let a = true; let b = a && c;//因为a是true,所以会判断第二个数。 console.log(b); //ReferenceError: c is not defined let a = false; let b = a && c;// 因为a是false,所以不会判断第二个数。 console.log(b);//false
3.或
同样是作用于两到多个值,但是只要有一个操作数为真,就返回真。
JavaScript里面的或同样存在短路现象,具体说明如下:
1.如果第一个操作数为真,则不会进入第二个数的判断。所以无论第二个操作数真假,都直接返回第一个操作数
2.如果第一个操作数为假,则会进入第二个数的判断。但是无论第二个操作数真假,都直接返回第二个操作数
实例:
console.log(false || true);//true console.log("Hello" || "");//Hello console.log("Hello" || "str");//Hello console.log(NaN || "");//"" console.log(0 || "Hello World");//Hello World console.log('' || 'str');//str console.log('' || false);//false
经典题:
let a = false; let b = a || c;因为a是false,所以会判断第二个数。 console.log(b); //ReferenceError: c is not defined let a = true; let b = a && c;// 因为a是true,所以不会判断第二个数。 console.log(b);//true