3:运算符 + 运算符优先级 [ 逻辑短路 ]
知识梳理
//1 浮点数不要直接参与数学运算 //2 逻辑运算中的 逻辑中断是个重要知识点 //3 后加加 表达式先返回值 变量再自增1 //4 一元运算中的 逻辑非 优先级最高
一 算数运算符
1)基本使用
加 减 乘 除 取模
应该避免用浮点数运算和相等比较
2)浮点数运算
尽量避免让浮点数直接参与运算 会有误差 原理:程序需要把浮点数转化为二进制,再进行运算,就会有误差 console.log(0.1+0.2); //竟然不是0.3 而是:0.30000000000000004 console.log(0.07 * 100); //竟然不是7 而是:7.000000000000001
3)浮点数比较
var num = 0.1 + 0.2; console.log(num == 0.3);//返回 false 它们不相等 不要直接用浮点数做相等比较 浮点数值最高精度是17位小数,但是在计算的时候精度远远不如整数
4)如何判断一个数能否被整除
它的余数是0,就说明这个数能被整除
这是 取模% 最主要的使用场景
二 递增递减运算符
1)概念
//1 自增自减必须配合变量使用
//2 前加加 和 后加加 单独使用时结果是一样的
//3 与其他代码一起使用时,结果会不一样
//4 工作中最常用的是后加加
1)前加加
//1 表达式先自增1,再返回值 //2 表达式的值 和 变量的值是同步的
2)后加加 [ 重难点 ]
//1 表达式先返回原值 变量再自增1 //2 变量的值始终比表达式的值大1
3)demo练习
<script> //++a 先自加 再返回自增后的值 //前置比较好理解 表达式的返回值和变量值是同步的 var a = 10; ++a; //表达式++a=11 变量a=11 var b = ++a + 2; //表达式++a=12 变量a=12 console.log(b);//14 //后加加:先返回表达式原值 变量再自加1 var c = 10; c++;//表达式c++=10 变量c=11 var d = c++ +2;//1表达式c++ = 11 变量c=12 //2 我们这里使用的是表达式c++ console.log(d);//13 console.log(c);//12 //重点理解这个 var e = 10; var f = e++ + ++e;//1 表达式e++=10 变量e=11 //2 表达式++e=12 变量e=12 console.log(f);//10+12=22 </script>
三 比较运算符
1)基本使用
大于 大于等于 小于 小于等于 等于 不等于 全等于 全不等
2)难点
//1 等于:值相等就是真 类型不同没有关系 //2 全等于:一摸一样 要求两边的值要相等 并且 类型也要相同才为真 console.log(18 == '18');//true [ 系统把字符串18转换为数字类型后再比较 ] console.log(18 === '18');//false
四 逻辑运算符
1)布尔值参与运算
逻辑与 && and true&&false = false //有一个条件是假 整个表达式结果就是假 逻辑或 || or true||false = true //有一个条件是真 整个表达式结果就是真 逻辑非 ! not !true = false //真变成假 假变成真
demo练习
<script> var num = 7; var str = "我爱你~中国~"; console.log(num > 5 && str.length >= num); // true console.log(num < 5 && str.length >= num); // false 左边表达式为假 console.log(!(num < 10)); // false 括号里为真 console.log(!(num < 10 || str.length == num)); // false 括号里为真 </script>
2)短路运算 ( 逻辑中断 )
//1 正常情况:布尔值参与运算 true && false = false //2 特殊情况:值或表达式参与逻辑运算,123 && 456 结果是啥? 用到了短路运算 //3 短路运算原理:当有多个表达式(或值)时,左边表达式的值可以确定结果时,就不再运算右边表达式
2.1 逻辑与短路运算
//1 第一个表达式的值为真 返回表达式2 //2 第一个表达式的值为假 返回表达式1 [ 逻辑中断 后面的就不执行了 ]
console.log(123 && 456);//返回 456 console.log(0 && 456);//返回0 在数字中只有0是false console.log(0 && 456 && 100);//返回0 表达式1为假 后面就不执行了
2.2 逻辑或短路运算
//1 第一个表达式的值为真 返回表达式一 [ 逻辑短路 后面的不执行了 ] //2 第一个表达式的值为假 且第二表达式值为真 直接返回表达式二 [ 后面的就不执行了 ]
//3 如果第二个表达式值为假 返回第三个表达式
console.log(123 || 456);//返回 123 console.log(0 || 456);//返回456 console.log('' || NaN || 0 || 100);//返回100 [ 重点理解这个 ] //1 表达式1的假 返回表达式2 //2 表达式2的值也是假 返回表达式3 //3 表达式3的值也是假 返回表达式4 // 如果后面还有 依次类推比较
2.3 逻辑中断非常重要
会影响到代码的执行结果
var num = 0; console.log(123 || num++);//逻辑或的逻辑中断 123为真 后面的num++就没有执行 console.log(num);//所有 变量num还是0
五 赋值运算符
= 直接赋值
+= -= 加减一个数后再赋值
*= /= %= 乘 除 取模后再赋值
var num = 10;
num += 5; 等同于 num = num + 5;
代码示例
//加等 += var num = 15; num += 5;//num+5后再赋值给num console.log(num);//20 //模等 %= var num = 15; num %= 2;//num = num % 2; 取模运算后把值赋给左边的变量 console.log(num);//1 15除以2=7余1
六 运算符优先级
1 小扩号 () 2 一元运算符 ++ -- ! [ 一元运算符:一个变量就可以运算的 ] 3 算数运算符 先乘除取模 后加减 4 关系运算符 > >= < <= 5 相等运算符 == != === !== 6 逻辑运算符 先&& 后 || 7 赋值运算符 = 8 逗号运算符 , //数字代表优先级 越小优先级越大
练习题 1
console.log(4 >= 6 || '人' != '阿凡达' && !(12 * 2 == 144) && true);//true // false || true && true && true // false || true 最后结果是 true var num = 10; console.log(5 == num / 2 && (2 + 2 * num).toString() === '22');//true // true && true 最后结果是 true
练习题 2
<script> var a = 3 > 5 && 2 < 7 && 3 == 4; //false && true && false console.log(a);//变量 a = false var b = 3 <= 4 || 3 > 1 || 3 != 2; // false || true || true console.log(b); //变量 b = true var c = 2 === "2"; // false console.log(c);//变量c = false var d = !c || b && a; //true || true && false //true || false 最后变量d = true console.log(d);//true </script>