**操作符: **是JavaScript中必不可少的一部分,数据之间的交换、计算等都有它的身影。
运算符分类
按照操作数分类:
一元操作符:
+、-、++、–、!、~
+1; // 取正值
-1; // 取负值
++1; // 自增1
--1; // 自减1
!true; // 取反
~1; // 按位取反
二元操作符:
+、-、*、/、%、&&、||、&、|、^
1 + 1; // 求和操作
3 - 2; // 求差值操作
2 * 3; // 求乘积操作
4 / 2; // 求商操作
3 % 2; // 求余操作
5 > 2 && 3 + 3; // 逻辑与操作
-1 || 0; // 逻辑或操作
三元操作符:
?:
5 > 2 ? 'OK' : 'NO'
按照运算方式分类:
算术运算符
- 涉及到的运算符号: + 、-、*、/、%
- 除了’+'运算符外,其它运算符进行运算时需要将左右操作数统一转化为 数字类型number后,再计算得到最终结果;
1 * 2; // 3
0 * 1; // 0
0 / 0; // NaN
1 / 0; // Infinity
null * 1; // 0
- NaN 与任何数值进行计算,结果都为NaN;
NaN * 1; // NaN
undefined * 1; // NaN
- Infinity 与 任何数值(排除NaN)计算,结果都为Infinity;
- "+"运算符参与的运算:
若操作符两边任意某一操作数为字符串类型,则将两边的操作数转换为字符串形式后进行拼接;
若操作符任意一边为引用类型(对象类型、数组类型、函数类型), 则将该类型转换为字符串后与其它操作数进行拼接;
若操作符两边都是原始类型(非字符串),则将两边的操作数转换为数字形式后进行计算
// 操作符任意一边为字符串类型
'str' + 123; // 'str123'
undefined + '123'; // 'undefined123
null + '123'; // 'null123'
{} + '123'; // '[object Object]123'
// 操作符两边都不是字符串类型
undefined + 123; // NaN
null + 123; // 123
{} + 123; // '[object Object]123'
[] + 123; // 123
[1,2,3,4]; // '1234123'
比较运算符
- 涉及到的运算符号:> 、<、>=、 <=
- 比较运算返回值的类型为:boolean类型
若比较运算符两边的数据都是字符串类型,则比较它们的Unicode编码值
NaN与任何数值比较,结果都是false
undefined 、null 之间相互相等
// 两边都是字符串类型
'ab' > 'a'; // true
// 未定义类型和空类型
undefined == undefined; // true
undefined == null; // true
null == null; // true
逻辑运算符
- 涉及到的运算符号:&& 、||、!
- 该运算符返回的结果为: 符号条件的表达式的值
5 > 2 && console.log('OK');
1 < 0 || console.log('No');
!0 && console.log('OK');
运算符的优先级
- 运算符的用途: 常用于数据之间的计算、比较、逻辑运算
- 运算符的优先级表现: 算术运算符 > 比较运算符 > 逻辑运算符