目录
一、逻辑运算符
JS中提供了三种逻辑运算符
1. ! 非
!可以用来对一个值进行非运算,所谓非运算就是对一个布尔值进行取反操作
true 变 false false 变 true
如果对非布尔值进行运算,则会将其转换为布尔值然后取反,所以我们可以利用该特点,来将一个其他的数据类型转换为布尔值
例如:
let b=10;
b = !!b //b=true
可以为一个任意的数据类型取两次反来将其转换为布尔值,原理和Boolean()函数一样
2. && 与
&&可以对符号两侧的值进行与运算
运算规则:
两个值中只要有一个值为false,则结果为false;只有两个值都为true时才会返回true
JS中的“与”属于短路的与,如果第一个值为false,则不会看第二个值;第一个值为true,会检查第二个值。
也可以在一行代码上串联多个值,第一个假值会被返回。如果所有的值都是真值,最后一个值将会被返回。
alert( 1 && 2 && null && 3 ); // null
alert( 1 && 2 && 3 ); // 3,最后一个值
3. || 或
||可以对符号两侧的值进行或运算
两个值中只要有一个true就返回true,如果两个值都为false则返回false
JS中的或属于短路的或,如果第一个值为true,则不会检查第二个值;第一个值为false,会检查第二个值。
一个或运算 ||
的链,将返回第一个真值,如果不存在真值,就返回该链的最后一个值。
alert( 1 || 0 ); // 1(1 是真值)
alert( null || 1 ); // 1(1 是第一个真值)
alert( null || 0 || 1 ); // 1(第一个真值)
alert( undefined || null || 0 ); // 0(都是假值,返回最后一个值)
4. && || 非布尔值的情况
对于非布尔值进行与或运算时,会将其转换为布尔值,然后再运算,并且返回原值
(1).与运算
如果第一个值为true,则必然返回第二个值
如果第一个值为false,则直接返回第一个值
//true && true
//与运算:如果两个值都为true,则返回后边的
var result = 5 && 6; //返回6
//与运算:如果两个值中有false,则返回靠前的false
//false && true
result = 0 && 2; //返回0
result = 2 && 0; //返回2
//false&&false
result = NaN && 0; //返回NaN
result = 0 && NaN; //返回0
(2).或运算
如果第一个值为true,则直接返回第一个值
如果第一个值为false,则直接返回第二个值
//true||true
//如果第一个值为true,则直接返回第一个值
result = 2 || 1; //返回2
result = 2 || NaN //返回2
//如果第一个值为false,则直接返回第二个值
result = NaN || 1; //返回1
result = NaN || 0; //返回0
注意:与运算
&&
的优先级比||
高!!!
二、关系运算符
通过关系运算符可以比较两个值之间的大小关系,如果关系成立会返回true,如果关系不成立则返回false
1. > 大于号
-判断符号左侧的值是否大于右侧的值
-如果关系成立,返回true,如果关系不成立则返回false
2. >= 大于等于
-判断符号左侧的值是否大于或等于右侧的值
3. < 小于号
-判断符号左侧的值是否小于右侧的值
4. <= 小于等于
-判断符号左侧的值是否小于或等于右侧的值
5.非数值的情况
对于非数值进行比较时,回将其转换为数字之后再进行比较,如果符号两侧的值都是字符串时,不会将其转换为数字进行比较,而会分别比较字符串中字符的Unicode编码
console.log(1 > true);//false
console.log(1 >= true); //true
console.log(1 > '0'); //true
console.log(10 > null); //true
任何值和NaN做任何比较都是false
console.log(10 <= "hello"); //false
比较两个字符串时,比较的是字符串的字符编码
console.log('a'<'b'); //true
比较字符编码时是一位一位进行比较;如果两位一样,则比较下一位。可以借用它来对英文进行排序
console.log('abc'<'b'); //true
如果比较两个字符串型的数字,可能会得到不可预期的结果。比较两个字符串型的数字时,一定要注意转型!!!
三、相等运算符
相等运算符用来比较两个值是否相等,如果相等会返回true,否则返回false
1. ==
使用 == 来做相等运算,当使用==来比较两个值时,如果值的类型不同,则会自动进行类型转换,将其转换为相同的类型,然后再比较
console.log(a == 4); //false
console.log('1' == 1); //true
console.log('1' == true); //true
console.log(null == 0); //false
undefined衍生自null,所以这两个值做相等判断时,会返回true
console.log(undefined == null);
NaN不和任何值相等,包括它本身
console(NaN == NaN); //false
注意:检查一个值是否是NaN,可以通过 isNaN() 函数来判断,如果该值是NaN返回true,否则返回false
2. !=
不相等用来判断两个值是否不相等,如果不相等返回true,否则返回false
使用!=来做不相等运算
不相等也会对变量进行自动的类型转换
console.log(10 != 5); //true
console.log(10 != 10); //false
console.log('abcd' != 'abcd'); //false
console.log('1' != 1); //false
3. ===
===用来判断两个值是否全等,它和相等类似,不同的是它不做类型转换
如果两个值的类型不同,直接返回false
console.log('123'===123); //false
console.log(null == undefined); //true
console.log(null === undefined); //false
4. !==
!== 用来判断两个值是否不全等,和不等类似,不同的是它不做类型转换
如果两个值的类型不同,直接返回true
console.log(1 !== '1'); //true
四、条件运算符
条件运算符也叫三元运算符
语法:
条件表达式 ? 语句1 : 语句2;
执行的流程:
条件运算符在执行时,首先对条件表达式进行求值,
如果该值为true,则执行语句1,并返回执行结果
如果该值为false,则执行语句2,并返回执行结果
如果条件表达式的求值结果是一个非布尔值,会将其转换为布尔值,然后再运算
let a=10;
let b=20;
let c=21;
//获取a和b中的最大值
let max = a > b ? a : b;
//获取abc中的最大值
max = max > c ? max : c;
//套娃写法,不推荐,不方便阅读
max = a > b ? (a > c ? a : c) : (b > c ? b : c);