运算符
1.按功能划分
(1)算数运算符
(2)位运算符
(3)关系运算符
(4)逻辑运算符
2.按操作数个数划分
(1)单目运算符:只有1个操作数,如i++
(2)双目运算符:有2个操作数,如a+b
(3)三目运算符:三目运算符也称问号运算符 a>b?a:b
3.运算符的结合性
(1)自左至右(先左后右)
(2)自右至左(先右后左)
算术运算符
(1)加法运算
a.非Number类型加法运算时,会将这些值先转换成Number类型再进行计算
document.write(true + true + '<br>'); //输出为2
b.任何值和NaN做加法运算时都得NaN
document.write(true + undefined + '<br>'); //输出为NaN
c.任何值和字符串做加法运算时,都先会转换成字符串,然后再进行字符串拼串的操作
document.write(true + "undefined" + '<br>');
//输出trueundefined
(2)减法运算
a.非Number类型减法运算时,会将这些值先转换成Number类型再进行计算
b.任何值和NaN做减法运算时都得NaN
c.字符串做减法也会转换成Number
document.write(100 - "undefined" + '<br>'); //输出为NaN
(3)乘法运算:规律同减法
(4)除法运算:规律同减法
分母为0时结果为无穷大
document.write(100 / 0 + '<br>'); //输出为Infinity
(5)取余运算:a%b,取余数
//m%n
document.write(10 % 3 + '<br>'); //余数为1
//n=0,输出结果为NaN
document.write(10 % 0 + '<br>'); //输出为NaN
//m=0,输出结果为0
document.write(0 % 10 + '<br>'); //输出为0
//m<n,输出结果为m
document.write(9 % 10 + '<br>'); //输出为9
一元运算符
(1)正号
非Number类型加法运算时,会将这些值先转换成Number类型再进行计算
(2)负号
赋值运算符
=号
1.简单赋值运算符:变量 = 数据
var num = 100;
var value = num;
num = 90;
document.write(num + "<br>");//num输出为90
document.write(value + '<br>');//value仍旧输出为100
改变num的值并不会间接改变value的值
2.复合赋值运算符
+=加后赋值:a+=1 即 a=a+1
-=减后赋值:a+=1 即 a=a-1
*=乘后赋值:a*=1
即 a=a*1
/=除后赋值:a/=1 即 a=a/1
%=取模后赋值:a%=1 即 a=a%1
注意a*=1+2
即为a=a*(1+2)
由于赋值运算是右结合性,所以先计算等号右边,然后再进行复合运算
自增/自减运算符
1.后缀表达式i++;
i--;
先用x的当前值作为表达式的值,再进行自增自减运算,“先用,后变”,先用变量的值参与运算,参与运算之后变量的值再进行自增自减运算。
var a = 10 , b = 20;
document.write((a++) + (b++)+ "<br>");//输出30
document.write(a + '<br>');//输出11
document.write(b + '<br>');//输出21
2.前缀表达式++i;
--i;
先完成变量的自增自减运算,再用x的值作为表达式的值,“先变,后用”,变量的值先变,再参与运算。
var a = 10 , b = 20;
document.write((++a) + (++b)+ "<br>");//输出32
document.write(a + '<br>');//输出11
document.write(b + '<br>');//输出21
逻辑运算符
1.&&(与运算符)
(1)对于非Boolean类型的数值,逻辑与会自动转换成Boolean类型来判断
(2)如果条件A不成立,则返回条件A的数值本身
(3)如果条件A成立,不管条件B成立不成立,都返回条件B数值本身
var a = '111' && '0';
document.write(a + '<br>');//输出为0
var a1 = '111' && 'abc';
document.write(a1 + '<br>');//输出为abc
var a2 = 0 && 'abc';
document.write(a2 + '<br>');//输出为0
2.||(或运算符)
(1)对于非Boolean类型的数值,逻辑与会自动转换成Boolean类型来判断
(2)如果条件A不成立,则不管条件B成立不成立,都返回条件B数值本身
(3)如果条件A成立,则返回条件A的数值本身
var a = '111' || '0';
document.write(a + '<br>');//输出为111
var a1 = 0 || 'abc';
document.write(a1 + '<br>');//输出为abc
var a2 = 0 || null;
document.write(a2 + '<br>');//输出为null
和逻辑与相反
3.!(非运算符)
对于非Boolean类型的数值进行取返,先将它转换成布尔值,然后再取反
var a = !0;
document.write(a + '<br>');//输出为true
比较运算符
1.运算结果只有true和false两种。
== | 判断值是否相等 |
=== | 绝对等于(值和类型均相等) |
!= | 值不等于 |
!== | 不绝对等于(值和类型有一个不相等,或两个都不相等) |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
2.对非数值进行比较时,会将其转换成数值然后再比较
3.如果符号两侧的值都是字符串时,不会将其转换为数字进行比较,而会比较字符串中字符的Unicode编码
4.null、undefined、NaN比较
document.write(Number(null) + '<br>'); //输出0
document.write(null == 0); //输出false
document.write(undefined == 0); //输出false
document.write(NaN == NaN); //输出为false
注意比较两个字符串类型的数字时,可能得不到预期的结果,所以要先将它们转成数字类型