运算符
数学运算符也叫算术运算符,主要包括加、减、乘、除、取余(求模)。 +:求和 -:求差 *:求积 /:求商 %:取模(取余数) 开发中经常作为某个数字是否被整除
一、算数优先级
同时使用多个运算符编写程序时,会按着某种顺序先后执行,我们称为优先级。
JavaScript中 优先级越高越先被执行,优先级相同时以书从左向右执行。 (1)乘、除、取余优先级相同
(2)加、减优先级相同
(3)乘、除、取余优先级大于加、减
(4)使用 () 可以提升优先级
(5)总结: 先乘除后加减,有括号先算括号里面的
二、赋值运算符
赋值运算符:对变量进行赋值的运算符
作用:赋值运算符的出现是为了简化代码
已经学过的赋值运算符:= 将等号右边的值赋予给左边, 要求左边必须是一个变量
其他赋值运算符: += -= *= /= %=
例:num = num +3 等同于 num +=3
三、一元运算符
使用一元运算符做自增运算
自增: 符号:++ 作用:让变量的值 +1
自减: 符号:-- 作用:让变量的值 -1
使用场景: 经常用于计数来使用。 比如进行10次操作,用它来计算进行了多少次了
难点:i++和++i 的区别
1.都可以理解为 i = i +1
-
前置自增:i ++ 先自加再使用(记忆口诀:++在前 先加)
-
后置自增:++ i 先使用再自加(记忆口诀:++在后 后加)
4.前置自增和后置自增独立使用时二者并没有差别! 一般开发中我们都是独立使用 后面 i++ 后置自增会使用相对较多
<body>
<script>
let age = 10
// age++
// ++age
// ++放在变量的后面,是先使用这个变量,在下一次再使用这个变量时就已经加好了
// console.log(age++ + 5) // 15
// console.log(age++ + 5 + age) // 26
// ++在变量的前面,先执行自增或自减,再使用这个变量
// console.log(++age + 5) // 16
// console.log(++age + 5 + age) // 27
// console.log(++age + 5 + age++) // 27
// console.log(++age + 5 + ++age) // 27
// console.log(age-- + 5 + age--) // age先和5相加得15,然后age自减得9,后面的age--中的age为前面的9,然后15先和9先加得24输出,然后age再自减
let i = 1
console.log(i++ + ++i +i);//i++先拿i使用,得到 1 + ++i +i,然后i进行自增,i=2,然后得到1 + ++i(i=2) +i,++i是先自增再使用,++i=3=i,得到1+3+3=7.
</script>
</body>
四、比较运算符
1、比较运算符:
左边是否大于右边 <: 左边是否小于右边 =: 左边是否大于或等于右边 <=: 左边是否小于或等于右边 ==: 左右两边是否相等,将两边的数据进行转换为数值 ===: 左右两边是否类型和值都相等 !==: 左右两边是否不全等 比较结果为boolean类型,即只会得到true或false.
2、字符串比较,是比较的字符对应的ASCII码
在比较两个字符串时,先从第一个字符开始比较,如果前一个字符中的第一个字符的AsclI码值大于(或小于)后一个字符串的第一个字符的ASCII码值,则称前一个字符串大于(或小于)后一个字符串;如果两个字符串的第——个字符的Ascll码值相等,则比较第二个字符,以此类推,直到ASCII码值不相等的字符。常见字符的ASCII码值如下:空格的ASCII码值为32;数字0到9的ASCII码值分别为48到37;大写字母“A”到“Z”的ASCII码值分别为65到90;小写字母“a”到“z”的ASCII码值分别为97到到122。
3、 NaN不等于任何值,包括它本身,所以NaN与任何类型比较,结果都是false
4、数字类型与字符串的比较
在比较数字类型和字符串时,字符串会隐式转换成数字类型,若字符串本身不是数字,而是字母之类的,则会转换失败,转换成NaN,而NaN不等于任何值,包括它本身,所以NaN与任何类型比较,结果都是false
5、尽量不要比较小数,因为小数有精度问题
6、总结:= 和 == 和 === 怎么区别?
(1)= 是赋值 (2)== 是判断 只要求值相等,不要求数据类型一样即可返回true (3)=== 是全等 要求值和数据类型都一样返回的才是true (4)开发中,请使用 ===
五、逻辑运算符
| 符号 | 名称 | 日常读法 | 特点 | 口诀 | ||
|---|---|---|---|---|---|---|
| && | 逻辑与 | 并且 | 符号两边都为true结果才为true | 一假则假 | ||
| 逻辑或 | 或者 | 符号两边有一个true就为true | 一真则真 | |||
| ! | 逻辑非 | 取反 | true变falsefalse变true | 真变假,假变真 |
1、逻辑运算符里的短路
短路:只存在于 && 和 || 中,当满足一定条件会让右边代码不执行
| 符号 | 短路条件 | ||
|---|---|---|---|
| && | 左边为false就短路 | ||
| 左边为true就短路 |
原因:通过左边能得到整个式子的结果,因此没必要再判断右边 运算结果:无论 && 还是 || ,运算结果都是最后被执行的表达式值,一般用在变量赋值
注:空字符串、undefined、0、false、NaN转换成布尔类型后,都转成false
<body>
<div class="box"></div>
<script>
// 短路运算:
// &&:如果第一个表达式为假,直接返回false,如果第一个为真,才会去执行第二个,返回第二个的值
// ||:如果第一个为真,就返回第一个值,后面的不再执行,如果第一个表达式为假,那么就执行第二个表达式,如果第二个也为假,那么就执行第三个,如果没有第三个,就为false
// let num = 4 > 3 && 5 && 9 // 9
// let num = 4 > 3 || 5 || 9
// let num = 10
// let a = num > 8 || console.log('123')
// console.log(a) // false
// console.log(num) // 10
</script>
</body>