目录
1.运算符
- 定义:运算符(operator)也被称为是用于实现赋值、比较和执行算术运算等功能的符号
- JavaScript中常用的运算符有:
- 算术运算符
- 比较运算符(关系运算符)
- 逻辑运算符
- 赋值运算符
- 条件运算符
2.算术运算符
2.1算术运算符概述
概念:算术运算使用的符号,用于执行两个变量或值的算术运算。
运算符 | 描述 | 实例 |
+ | 加 | 10+10=20 |
- | 减 | 20-10=10 |
* | 乘 | 10*20=200 |
/ | 除 | 10/20=0.5 |
% | 取余(取模),得到除法的余数 | 9%2=1 |
++ | 自增运算符(只能配合变量使用) | num=1 num++ num=2 |
-- | 自减运算符(只能配合变量使用) | num=1 num-- num=0 |
** | 指数运算符 | x**y x的y次幂 |
2.2 浮点数的精度问题
浮点数值的最高精度是17位小数,但在进行算术计算时其精确度远远不如整数。
var result=0.1+0.2;//结果不是0.3,而是0.30000000000000004
console.log(0.07*100);//结果不是7,而是7.000000000000001
即:不要直接判断两个浮点数是否相等
2.3自增和自减运算符(一元运算符)
2.3.1自增和自减运算符概述
- 如果需要反复给数字变量添加或减去],可以使用自增或自减运算符来完成。
- 在JavaScript中,自增(+ +)和自减(- -)在变量前面时,我们可以称为前置运算符,在变量后面时,我们可以称为后置运算符。
-
注意:递增和递减运算符必须和变量配合使用。
2.3.2自增运算符
- 前置自增运算符
++num前置递增,就是自加1 ,类似于num = num + 1 ,但是++ num写起来更简单。
var num = 10;
console(++num + 10);// 21
口诀:先自加,再赋值
- 后置自增运算符
num ++后置递增,就是自加1 ,类似于num = num + 1 ,但是num ++写起来更简单。
var num = 10;
console.log(10 + num++);// 20
使用口诀:先赋值(返回原值),后自加
2.3.3自增自减总结
- 运算时的顺序问题
不参与别的运算 | 前置与后置没有区别 | |
参与别的运算 | 前置 | 先自增再参与运算 |
后置 | 先原值运算,再自加 |
- 前置递增和后置递增运算符可以简化代码的编写,让变量的值+1比以前写法更简单
-
开发时,大多使用后置递增/减,并且代码独占一行,例如:num ++;或者num--
3.比较运算符
3.1比较运算符概述
- 概念:比较运算符(关系运算符)是比较两个值,比较运算后,会返回布尔值(true / false )作为比较运算的结果
-
运算符名称 说明 案例 < 小于号 1<2 > 大于号 2>1 <= 小于等于号 1<=2 >= 大于等于号 3>=2 == 等于(会转数据类型) 3=='3' != 不等于 3!=4 === 全等(不会转数据类型) 5===5 !== 不全等 5!=='5'
3.2特殊的比较
- 有字符串参与的比较
- 一边是数字,一边是数字字符串时会转数据类型
- 两边都是字符串时,比较ascii码,并且一位一位比较
console.log('18'>9);//true console.log('18'>'9');//false
- 几个特殊的值比较
- NaN 和谁都不等
console.log(NaN==NaN);//false*****
- undefined 一般不进行比较
console.log(undefined>-1);//false console.log(undefined==null);//true*****
- null 当中间是==时不会转数据类型
console.log(null>-1);//true console.log(null==0);//false***** console.log(null=='');//false
- '' ''空串隐式转换成了0
console.log(''==false);//true*****
- NaN 和谁都不等
- 数组的比较
console.log([]==[]);//false console.log([]!=[]);//true console.log(![]==[]);//true
- 对象的比较
console.log({}=={});//false console.log({}!={});//true console.log(!{}=={});//false
4.逻辑运算符
4.1逻辑运算符概述
概念:逻辑运算符是用来进行布尔值运算的运算符,其返回值也是布尔值(true,false)。后面开发中经常用于多个条件的判断
运算符名称 | 说明 | 描述 |
a&&b 逻辑与 | and | () 如果 a 能被转换为 false,那么返回 a;否则,返回b。因此,&& 用于布尔值时,当操作数都为 true 时返回 true;否则返回 false. |
a||b 逻辑或 | or | () 如果a 能被转换为 true,那么返回 a;否则,返回b。因此,|| 用于布尔值时,当任何一个操作数为 true 则返回 true;如果操作数都是 false 则返回 false。 |
!a 逻辑非(取反) | not | () 如果操作数能够转换为 true 则返回 false;否则返回 true。 |
不过实际上&&
和||
返回的是一个特定的操作数的值,所以当它用于非布尔值的时候,返回值就可能是非布尔值,而是原值。
consol.log(undefined&&'hello');//undefined
console.log(2&&true);//true
console.log(2&&3);//3
console.log([]||'hello');//[]
console.log(null||'hello'+2);//hello2
4.2逻辑中断(短路逻辑)
- 逻辑与&&:a&&b
如果 a 能被转换为 false,那么返回 a;否则,返回b。
false&& anything // 被短路求值为 false,anything部分不会进行运算求值
- 逻辑或 || :a || b
如果 a 能被转换为 true,那么返回 a;否则,返回b。
true || anything // 被短路求值为 true,anything部分不会进行运算求值
5.赋值运算符
- 概念:将它右边操作数的值赋给它左边的操作数
运算符名称 | 简写操作符 | 含义 |
= | x=y | x=y |
+= | x+=y | x=x+y |
-= | x-=y | x=x-y |
*= | x*=y | x=x*y |
/= | x/=y | x=x/y |
%= | x%=y | x=x%y |
- 举例:
var a=10;
a += 5;//15 相当于a = a + 5;
a -= 5;//5 相当于a = a - 5;
a *= 5;//50 相当于a = a * 10;
- =、== 与 ===
= 赋值运算符 == 比较运算符,如果两边操作数相等时返回 true。有隐式转换 === 比较运算符,两边操作数相等且类型相同时返回 true。无隐式转换
6.条件运算符(三元或三目运算符)
- 概念:是 JavaScript 中唯一需要三个操作数的运算符。运算的结果根据给定条件在两个值中取其一。
- 语法为:
条件表达式?条件成立返回值1:条件不成立返回值2
- 如果
条件
为真,则结果取值 1
。否则为值 2
。你能够在任何允许使用标准运算符的地方使用条件运算符。 - 举例
var status = age >= 18 ? "adult" : "minor"; //age>=18返回'adult',否则返回'minor'
6.运算符的优先级
- 概念:运算符的优先级,用于确定一个表达式的计算顺序。在你不能确定优先级时,可以通过使用括号显式声明运算符的优先级。
- 下表列出了描述符的优先级,从最高到最低。
特别的:一元运算符里面的逻辑非优先级很高,逻辑与比逻辑或优先级高()圆括号的优先级最大 一元运算符 ++(++a优先级小于a++)、--、! 算术运算符 **(幂)、*、/、%、+、- 比较运算符 <、<=、>、>=、==、!=、===、!== 逻辑运算符 &&、|| 三元运算符 ?: 赋值运算符 =、+=、-=、*=、、/=、%= 展开运算符 ... 逗号运算符 , - 也可参照下表,下表按从最高到最低的优先级列出JavaScript运算符。具有相同优先级的运算符按从左至右的顺序求值。
运算符
描述
. [] ()
字段访问、数组下标、函数调用以及表达式分组
++ -- - ~ ! delete new typeof void
一元运算符、返回数据类型、对象创建、未定义值
* / %
乘法、除法、取模
+ - +
加法、减法、字符串连接
> >>>
移位
< >= instanceof
小于、小于等于、大于、大于等于、instanceof
== != === !==
等于、不等于、严格相等、非严格相等
&
按位与
^
按位异或
|
按位或
&&
逻辑与
||
逻辑或
?:
条件 = oP=
赋值、运算赋值 ,
多重求值