运算符:用于执行程序代码运算,会针对一个以上操作数项目来进行运算+-*/
表达式:由一个或多个操作数通过运算符连接起来的式子 1+2 1>2
1.1 运算符的分类
算数运算符
赋值运算符
比较运算符
逻辑运算符
三目运算符
1.2 算数运算符
// + - * / %(取余 取模) ++(自加) --(自减)
// 1.%(取余 取模)
console.log(10%3); // 1
varn=123;
console.log(n%10); // 个位
console.log(parseInt( (n/10) %10 ));
console.log(parseInt( (n/100) %10 ));
// 2.++自加 自加1
varm=10;
m++;
m++;
console.log(m);
// ++在前,先自加再参与运算
// ++在后,先参与运算再自加
// 先看到什么,就先做什么
varn=10;
varm=n++;
console.log(m, n); // 10 11
varn=10;
varm=++n;
console.log(m, n); // 11 11
varx=1; // 4
vary=++x; // 3
varz=x+++y+++++x;
// 2 2 4
console.log(x, y, z); // 4 3 8
// 3.--自减1
varn=10;
n--;
n--;
console.log(n); // 8
// --在前,先自减再参与运算
// --在后,先参与运算再自减
varx=1, // 2
y=1; // -1
varz=x+++--y+y--;
// 1 0 0
console.log(x, y, z); // 2 -1 1
// 4.隐式类型转换: 在运算过程中会自动把数据转换为对应类型,再参与运算
// 在算数运算中,会尽可能的转换为数字,再参与运算
console.log( '5'-1); // 5-1 -> 4
console.log( true+2 );// 1+2 -> 3
console.log( false+true ); // 0+1 -> 1
console.log( '10a'-3 ); // NaN
console.log( NaN-5 ); // NaN 所有涉及到NaN的运算结果都是NaN
// 4.1 +的隐式转换:+遇到字符串的时候成为拼接
console.log( '5'+1 ); // 成为拼接 '51'
console.log( 1+2+'3'+4+5); // '33'+4+5 -> 3345
1.3 赋值运算符
// = += -= *= /= %=
// 1.= 赋值号 把右边的值,给左边的变量
vara=10;
varb=a; // 10
b++;
console.log(a, b); // 10 11
// 2.+= 累加
varn=10;
n+=5; // 在原来的基础上累加
// n = n + 5;
console.log(n);
// 3.-+ 累减
varn=10;
n-=5;
console.log(n);
// 4.*= 累乘
varn=10;
n*=5; // n = n*5
console.log(n); // 50
// 5./= 累除
varn=10;
n/=5;
console.log(n);// 2
// 6.%=
varn=12;
n%=5;
console.log(n);// 2
1.4 比较运算符
//比较运算符:> < >= <= ==等于 !=不等于 ===全等 !==不全等
//==和===的区别:==会进行隐式转换,===不会进行隐式转换,要求一模一样
console.log( 100>2 ); // true
// 隐式类型转换: 在运算过程中会自动把数据转换为对应类型,再参与运算
console.log( '100'>2 ); // 100>2 true
// 字符串和字符串比较: 按位进行比较,一位一位比,比较的是ASCII值 0-48 A-65 a-97
console.log('100'>'2'); // false
console.log(1=='1'); // true 会进行隐式转换
console.log(1!='1'); // false
console.log(1==='1'); // false 全等不会进行隐式转换,要求一模一样
console.log(1!=='1'); // true
// ECMA规定null和undefined相等
console.log(null==undefined); // true
console.log(NaN==NaN); // false NaN不和任何值相等,不等于自身
1.5 逻辑运算符
varn=75;
// 判读分数是否在60-80之间
console.log(80>n>60); // 80>75 -> true>60 1>60 不成立false
// 多个表达式的链接需要使用逻辑运算符:&&逻辑与 ||逻辑或 !逻辑非
// 1.&&逻辑与:每一个表达式都为真时,结果才为真,一假为假
console.log( 1>2&&2<5 ); // false && true -> false
console.log( 1<2&&2<5 ); // true && true -> true
// 2.||逻辑或:有一个表达式的值为真,结果就为真,一真为真
console.log( 1>2||2<5 ); // false || true -> true
console.log( 1>2||2>5 ); // false || false -> false
// 3.!逻辑非: 取反,结果是布尔值
// 假值:0 NaN null undefined '' false
console.log(!true); // false
console.log(!10); // false
console.log(!NaN); // true
// 4.逻辑与短路运算:第一个表达式为假,结果已经确定为假,后续的表达式不会再执行
vara=1, b=1;
varc=--a&&b++;
// 0 && b++(不会执行)
console.log(a, b, c); // 0 1 0
// 5.逻辑或短路运算:第一个表达式为真,结果已经确定为真,后续的表达式不会再执行
vara=1, b=1;
a++||b++;
// 1 || b++(不会执行)
console.log(a, b); // 2 1
// 第一个表达式已经决定结果了,后续的表达式就没有意义了,不会再执行了
1.6 三目运算符
三目运算符:条件 ? 条件成立时执行的代码 : 条件不成立时执行的代码
varmoney=150;
money>100?console.log('出去玩了') : console.log('买彩票');
1.7 优先级
// 运算符的优先级:算数运算符>比较运算符>逻辑运算符
console.log( 2+3*5 ); // 先乘除后加减 17
console.log( 2+3>8&&1+2>0 );
// 5 > 8 && 3 > 0
// false && true
2.流程控制语句
流程控制语句分类
顺序结构:代码从上到下去执行
分支结构:if switch if-else
循环结构:for while do-while
其他:break continue
2.1 分支语句
if语句
语法:if(条件){ 条件成立时执行代码 }
双分支:if(条件){ 条件成立时执行代码 }else{ 条件不成立时执行代码 }
if语句如果不加{},只能控制紧跟着的第一条
if中的条件也可以是值,是真值就可以执行
varmoney=500;
// 1.如果有200,买个气球,买束鲜花
if(money>=200){
// 条件成立时执行的代码
console.log('买个气球');
console.log('买束鲜花');
}
// 2.if语句如果不加{},只能控制紧跟着的第一条
varmoney=10;
if(money>=200)
// 条件成立时执行的代码
console.log('买个气球');
console.log('买束鲜花');
console.log('1111111');
console.log('2222222');
// 3.if中的条件也可以是值,是真值就可以执行
// 假值:0 null undefined '' NaN false
if(100){
console.log('吃饭');
console.log('睡觉');
console.log('学习');
}
// 4.if(条件){ 条件成立时执行的代码 }else{ 条件不成立时执行的代码 }
varmoney=100;
if(money>=200){
console.log('过情人节');
console.log('出去吃饭');
}else{
// 条件不成立时执行的代码
console.log('好好学习');
console.log('努力赚钱');
}
if的多分支
语法:if(条件1){ 条件1成立时执行的代码 }else if(条件2){ 条件2成立时执行的代码 } else if(条件3){ ...}
把不容易实现的条件放在上边,可以减少判断次数
分数:
90以上你真优秀
80-90有上升空间
70-80还可以
60-70加油
否则60以下去重修把
// if语句的嵌套
// 分数在0-100之间时,区间判断
varn=85;
if(n>=0&&n<=100){
if(n>=90){
console.log('你真优秀');
}elseif(n>=80&&n<90){
console.log('上升空间');
}elseif(n>=70&&n<80){
console.log('还可以');
}elseif(n>=60&&n<70){
console.log('加油');
}else{
console.log('去重修把');
}
}
switch语句
swith(匹配项){
case值1: 匹配到值1时执行的代码; break;
case值2: 匹配到值2时执行的代码; break;
...
default: 以上都没有匹配到所执行的代码
}
break作用:防止穿透,不加就会从匹配到的那一项开始,后续代码不再判断,直接执行
varstu='结婚';
switch(stu){
case'结婚': console.log('成家立业'); break;
case'丧偶': console.log('独自生活'); break;
case'单身': console.log('自己真快活'); break;
case'离异': console.log('离婚带俩娃'); break;
case'有对象': console.log('过情人节'); break;
default: console.log('年龄太小');
}
2.2循环语句
2.2.1 for循环
语法:for(表达式一;表达式二;表达式三){ 循环体 }
for(初始化循环变量;循环条件;更新循环变量){ 循环体 }
注意:循环条件一定要保证能让循环结束,否则陷入死循环
重复性的内容,有规律的重复,可以使用循环
执行过程
1.初始化循环变量 i=1 2
2.判断循环条件 i<=5
条件成立,执行下一步
条件不成立,循环结束
3.执行循环体
4.更新循环变量
5.执行步骤2
for(vari=1; i<=5; i++){
// 循环体
console.log('吃饭');
console.log(i); // 1 2 3 4 5
}
// 求1-100的和
varsum=0; // 存放和
for(vari=1; i<=100; i++){
sum+=i; // 累加 在和的基础上进行添加 1 2 ..100
}
console.log(sum); // 5050
for使用