JavaScript的运算符与分支循环
一、运算符
1.算数运算符
+ - * / % ++ --
% :取余
++ :自增,在原有基础上加1
-- :自减,在原有基础上减1
++ 和 -- 放前放后的计算区别:
var a = 1;
var b = a ++;// 先把a的值赋给b,a再自加,所以b = 1,a = 2
var c = ++a;//a先自加,再把最新的值传给c,所以a = 3,c = 3
console.log(a,b,c);// 3,1,3
++ 在后,先赋值,再自加
++ 在后,先自加,再赋值
--同理
来个题检验一下啊
var num = 1;
var result = num-- + --num + ++num + num++ + num++;
console.log(result);
//答案解析见文章末尾
2.比较运算符
> < >= <= ==(等于) !=(不等于) ===(全等于) !==(不全等于)
== 只比较数值是否相同,可能会自动进行数值转换
=== 比较数值,还比较数据类型
推荐使用 === 和 !==
几个不知道哪里会用到的例子
表达式 | 结果 | 分析 |
---|---|---|
2 > ‘10’ | false | 字符串 ‘10’ 自动转化成数值 10 |
‘2’ > ‘10’ | true | 字符串之间的比较 ,比较的是首个字符的Unicode码,2是50,1是49 |
2>‘10a’,2<‘10a’,2 ==‘10a’ | false | '10a’自动转成数值是NaN,NaN和任何值比较都是false |
3.逻辑运算符
&& 与,两者都为true,结果才为true,否则为false
|| 或,有一个为true,结果就为true,两者都为false结果才为false
! 非,取反
短路逻辑
&& 当第一个条件为false,就不执行第二个条件
|| 当第一个条件为true,就不执行第二个条件
不用管最终结果是true还是false,只关心第二个条件有没有执行
PS:&&优先级高于||
看个题
var a = 5;
a > 1 && console.log(x);
a < 4 || console.log(x);
结果会打印什么?
解析在文章末尾
再来一个
var n = 1 && 2; // n = 2
var m = 0 || 5; // m = 5
看第二个条件执不执行
4.位运算符
& 按位与 有0就为0
| 按位或 有1就为1
模拟计算机底层运算过程,简单的说就是这么一个过程:
数据 ==> 二进制 === >计算结果 ===>十进制
看个无脑例子
2 & 6
010 & 110 先转二进制
010 上下对齐,不齐补0,上下做&运算
110
010
2 转为十进制
所以 2 & 6 = 2
5.赋值运算符
=(赋值)
+=
-=
*=
/=
%=
…
运算顺序:先执行运算,再赋值
var str = "hello";
str +=" world!"; //str = str + " world!"
console.log(str); //hello world!
6.三目运算符
一目:
++
==
!
一个运算符,一个操作数据/表达式
二目:+ - * / % > <
一个运算符,两个操作数据/表达式
三目:条件表达式 ?表达式1:表达式2
,两个运算符,三个数据/表达式
表达式:由数据或者由运算符连接的数据所组成的形式
条件表达式?表达式1:表达式2
true 执行表达式1
false 执行表达式2
例子:
1?2:0 // 2
0?1:2 // 2
var a = 5;
a >1? a--:a=1 // 5, a = 4
a >1? a--:a=1 // 4, a = 3
...
a >1? a--:a=1 // 1, a = 1
二、条件判断
1.if
if(条件表达式){
语句块
}
如果{ 这里只有一行语句的话 } ,{}可以不写
2.if-else
if(条件表达式1){
语句块1
}else if(条件表达式n){
语句块n
}else{
语句块n+1 //所有的条件都不满足时执行
}
3.switch -case
switch(表达式){ // 一般情况下是一个 变量
case 值1: //表达式 === 值1,执行语句块1
语句块1
break; //结束switch-case , 不再往后执行
case 值n:
语句块n
break;
default: //达式和以上每个值都不等,执行语句块 n+1
语句块n+1
}
**不加break的话会执行下一个case**
三、分支循环
两大要素:循环条件
和 循环体
循环条件控制循环的次数
循环体控制每次循环时执行的代码
1.while循环
while(循环条件){
循环体
}
符合条件就进入循环
死循环:
while(true){.....}
2.do-while 循环
do{
循环体
}while(循环条件);
先进行一次循环,再判断条件
3.for 循环
for(初始值;循环条件;增量){
循环体
}
不写条件默认死循环
for(;;){.....}
打印一个九九乘法表
for(i=1;i<=9;i++){ //嵌套循环 (外层循环类似控制行数)
for(j=1,str='';j<=i;j++){ // 常用空字符去拼接字符串(内层循环类似控制列数)
str+=j+'*'+i+'='+(i*j)+' ';
};
console.log(str);
}
4.break
结束循环,不在执行循环内的语句
结束死循环:
while(true){
console.log(111);
break;
}
for(;;){
console.log(111);
break;
}
5.continue
跳过这一次循环,不执行本次循环里剩余语句,执行下一次循环
两道题的解析
算数运算符题目解答
var num = 1;
var result = num-- + --num + ++num + num++ + num++;
console.log(result);
a = num-- , a = num = 1, num = num - 1 = 0
b = --num , b = num - 1 = -1 , num = -1
c = ++num , c = num + 1 = 0, num = 0
d = num++ , d = num = 0, num = num + 1 = 1
e = num++ , e = num = 1, num = num + 1 = 2
所以
result = a + b + c + d + e
= 1 - 1 + 0 + 0 + 1
= 1
num = 2
短路逻辑
var a = 5;
a > 1 && console.log(x);
a < 4 || console.log(x);
a > 1 //true
&&的第一个条件为true,所以会执行第二个条件
console.log(x)
由于x未定义,所以会报错:x is not defined
a < 4 //false
||第一个条件为false,所以会执行第二个条件
同理也会报错
换一下条件
a > 1 || console.log(x);
||第一个条件为true 不执行第二个条件,不会报错
a < 4 && console.log(x);
&&第一个条件为false,不执行第二个条件,不报错