运算符 +,-,*,/,(),%,++,–
1 | var a = 1, |
+
+ 在JS中有两种不同的用途
- 数学运算
- 字符串拼接
任何数据类型的值 + 字符串,结果都是字符串
1
var c = 's' + 1 + 1;
1
2
3
4
5
6
7
8var c = 1 + 1 + 's' + (1 + 1);
/*
* 按照从左往右的运算顺序:
* 1.(1 + 1) = 2
* 2. 1 + 1 = 2
* 3. 2 + 's' = '2s'
* 4. '2s' + 2 = '2s2'
*/
/
1
2
3
4var c = 0 / 0; // c = NaN:Not a Number -> NaN属于数字类型
var a = 1 / 0; // a = Infinity -> 属于数字类型
var b = -1 / 0; // b = -Infinity -> 属于数字类型1
var a = 1 / 2; // a = 0.5
% :取余运算符
1
2
3var a = 4 % 3; //a = 1,4除以3的余数
var b = 5.5 % 2; // b = 1.5
var c = -4 % 2; // -0++ :递增 –:递减
- 后置递增:a++,先返回值,返回值之后再加一
- 前置递增:++a,会把值加一后返回
- 递减同理
1
2
3
4
5
6
7
8var a = 1,
c;
c = a++ + ++a; // c = 4, a = 3
/*
* 1. a++返回1
* 2. 1 + (2 + 1)
* 3. 把4赋值给c
*/1
2
3
4
5
6
7
8var a = 5,
c;
c = --a + a++; // a = 4,c = 8
/*
* 1. --a:5-1,返回4
* 2. a++:返回4,返回后a = a+1
* c = 4 + 4
*/
比较运算符
- > , >= , < , <=
需要注意两点:
Number 与 String比较,将String转化成Number再比较
String 与String比较,依次从左向右比较每个字符所对应的的ASCII码
1
2'4' > 1;//true
'2.1' > '11';//true 依次比较ASCII码:字符2ASCII > 字符1ASCII,为true则直接返回trueASCII表
== , ===
- == 是不看数据类型的,也就是说表面的值相等即可
1
1 == '1';//true
- === 要求更严格,要求值和数据类型都相等
- == 是不看数据类型的,也就是说表面的值相等即可
! NaN == NaN 为false。可以看出NaN与 包括自己在内的任何值都不相等
逻辑运算符
注意: undefined , null , NaN , ‘’ , 0 , false 这些值一定为假
&&
遇到真,就继续往后判断
遇到假,就直接将假值返回1
2
3
40 && 1 //0,遇到0其值为假,直接返回假值->0
1 && 1 //1
1 && 0 // 0,遇到1值为真,继续向后判断,0值为假,返回假值0
1 && 1 //1||
遇到真,就之间返回这个真值
遇到假,就继续往后判断1
2
3
41 || 0 // 1 遇到1,值为真,直接返回真值->1
1 || 1 // 1
0 || 0 //0
0 || 1 //1 遇到0,值为假,继续向后判断,1为真,直接返回这个真值1!
1 | var a = !1; // false |
分支语句
if语句
- if结构:对于每一个if语句都要判断一下表达式是否满足条件
1
2
3
4
5
6
7if(a > 0){
...
}
if(b >0){
...
}
... - if-else结构:适用于有明确的互斥条件的逻辑,遇到一个符合调的分支后,就不检查之后的if分支了
1
2
3
4
5
6
7
8
9if(a > 1){
...
}else if( a < 0 && a > -1){
...
}else if(a <= -1){
...
}else{
...
}
- if结构:对于每一个if语句都要判断一下表达式是否满足条件
switch-case 语句
1
2
3
4
5
6
7
8
9
10
11
12switch(表达式){
case 表达式1:
代码块;
break;
case 表达式2:
代码块;
break;
...
default:
代码块;
}if与switch的选择:
- 当要判断的变量是否是一个准确的值的时候,switch结构更适合。
- 当要判断变量出于什么范围的时候,if结构更适合