逻辑运算符
Js中提供了三种逻辑运算符
- !非
- &&与
- || 或
!非
- !可以用来对一个值进行非运算
- 所谓非运算就是对一个布尔值进行取反操作
true变false false变true
例如:
var a=true;
a=!a;
console.log(a); 结果是false - 如果对一个值进行两次取反,它不会变化
例如:
var a=true;
a=!!a;
console.log(a); 结果还是true - 如果对非布尔值进行运算,则会先将其转化为布尔值然后再取反
例如:
var a=123;
a=!a;
console.log(a); 结果是false
原因:
先将123转化为布尔值是true,再取反就是false
可以利用这一特点来将任意数据类型转换为布尔值,
对任意数据类型取两次反,来将其转换为布尔值
例如:
var b=“hello”;
b=!!b;
console.log(b); 结果是true
原因:
先将字符串hello转换为布尔值是true,取第一次反为false,再取第二次反就是true
&& 与
布尔值的与运算
- &&可以对符号两侧的值进行与运算并将结果返回
- 运算规则:
- 两个值中只要有一个值为false,就返回false
例如:
var result=true && false;
console.log(result); 结果是false - 只有两个值都为true,才返回true
例如:
var result=true && true;
console.log(result); 结果是true
- js中的“与”是短路的与,如果第一个值是false,则不会再 看第二个值
例如:
var result=false && alert(“出不出来”);
console.log(“result=”+result); 结果是false
浏览器不会执行第二条语句会直接输出false
非布尔值的与运算
会先将其转换成布尔值,然后在运算并返回原值
运算规则:
- 如果两个值都为true,则会返回后面的
var result=1 && 2;
console.log(result); 结果是2 - 有一个为false则返回false
result=0 && 2;
console.log(result); 结果是0
- 两个值都为false则返回前一个false
result=NaN && 0;
console.log(result); 结果是false
总结
- 如果第一个值为true,则必然返回第二个值
- 如果第一个值为false,则直接返回第一个值
|| 或
- ||可以对符号两侧的值进行或运算并将结果返回
- 布尔值的或运算
- 运算规则:
两个值都为false,则返回false
result=false || false;
console.log(result); 结果是false
只要有一个值为true,就返回true
result=true || false;
console.log(result); 结果是true - js中的“或”是短路的或,如果第一个值是true,则不会再看第二个值
var result=true&& alert(“出不出来”);
console.log(“result=”+result); 结果是true
原因:
第一个值是true,浏览器不会执行第二条语句,直接输出true
非布尔值的或运算
会先将其转换成布尔值,然后在运算并返回原值
运算规则:
- 如果第一个值为true,则直接返回第一个值
result=1 || 2;
console.log(“result=”+result); 结果是1 - 如果第一个值为false,则必然返回第二个值
result=0 || 2;
console.log(“result=”+result); 结果是2