运算符
算术运算符
+ - * / % ++ --
- 除了加法的所有运算全部会先转为number再进行运算(Number)转换不成功出现NaN
- 一个数值和NaN相加得到的也是一个NaN
- 加法运算如果有一个值为字符串那么会进行字符串拼接
- ++ 前置和后置 前置先执行++ 后置后执行++
- ++不能放在() 之前
- 运算对应的顺序 先执行()里的内容 再执行 ++或者--操作和对应的* / % 再执行+ -操作
逻辑运算符
&& || !
- 与(&&) 俩个都为true 取最后一个 有一个为false就取第一个false
- 或(||) 有一个true就取第一个true 都为false就取最后一个false
- 非(!)取反
比较运算符
> < >= <= != == === !==
- 当出现的是> <号他会自动进行相关的转换(number)
- 对应比较的都是字符串那么会比较对应的ascii码(A 65 a 97)
- == 比较值 数值类型123和字符串123是相等的(NaN!=NaN)(undefined == null)
- === 基于==之上 除了比较值还要比较类型 123!='123' (undefined !== null)
- 当出现对应的! 对应的将原本的结果取反就可以了
赋值运算符
= += -= *= /= %=
赋值运算符的他是属于最后执行的(赋值操作是最后操作)
位移运算符(进位补零)
<< >>
表达式概念
表达式是由对应的值(变量)和运算符构成的式子
- 由对应的算法运算符组成的式子 算法表达式(返回对应的结果)
- 由对应的逻辑运算符组成的式子 逻辑表达式 (返回对应的值)
- 由对应的比较运算符组成的式子 条件表达式 (返回boolean类型的值)
三目运算符
条件表达式?true的结果:false的结果
/**
* 如果2大于3那么返回对应的10 如果不大于返回20
*/
var result = 2>3?10:20
var un
//如果对应的他填写是对应的一个变量或者值 那么他会将这个值直接转换为boolean类型
var a = un?'你好':'hello'
执行顺序
var a = 100+20*50*0&&20+'hello'-12*8||undefined?(10+12)/10+10%2:(5+2)%2*15+16 //31
先算括号 再算* / % 再 + - 再逻辑运算 再三目运算符 再赋值
运算符 | 描述 |
---|---|
. [] () | 对象成员存取、数组下标、函数调用等 |
++ -- ~ ! delete new typeof void | 一元运算符 |
*** / %** | 乘法、除法、去模 |
+ - + | 加法、减法、字符串连接 |
<< >> >>> | 移位 |
< <= > >= instanceof | 关系比较、检测类实例 |
== != === !== | 恒等(全等) |
& | 位与 |
^ | 位异或 |
| | 位或 |
&& | 逻辑与 |
|| | 逻辑或 |
?: | 三元条件 |
= x= | 赋值、运算赋值 |
, | 多重赋值、数组元素 |
控制语句
控制语句是对应程序的一个控制,他分为对应的条件控制语句和循环控制语句
条件控制语句是根据对应的条件来执行对应的代码,循环控制语句是根据对应的条件来执行多次重复的代码
条件控制语句
常见的控制语句
- if else (根据对应的boolean条件值来进行判断 也就是说你传入的条件返回的不是boolean 他会转为对应的boolean类型)
- switch case (根据对应的值来进行比对 里面采用的是=== 会自动进行比对)
if else讲解
if(条件表达式){
对应满足条件执行的代码
}else{
不满足条件执行的代码
}
//判断输入一个数值是奇数还是偶数
var number = prompt('请输入一个数值') //浏览器的一个弹窗 里面可以输入对应的内容 这个内容会返回给你 类型是字符串
// console.log(`number`, number);
// if(number%2==0){
// console.log(`当前输入的是偶数`);
// }else{
// console.log(`当前输入的是奇数`);
// }
//如果返回的值不是一个boolean类型的值 自动转为boolean类型
if(number%2){//如果为0就是false
console.log(`当前输入的是奇数`);
}else{
console.log(`当前输入的是偶数`);
}
多分支结构(else if)
多分支结构只有上面有一个满足了条件 下面的都将不会再运行
if(条件1){
满足条件执行的代码
}else if(条件二){
满足条件执行的代码
}...
else{
所有条件都不满足执行的代码
}
//判断输入一个数值是奇数还是偶数
var number = prompt('请输入一个数值') //浏览器的一个弹窗 里面可以输入对应的内容 这个内容会返回给你 类型是字符串
console.log(`number`, number);
// if(!(number%2) && number%2!=0){ //如果是NaN 不是0
// console.log(`当前输入出错`);
// }else if(number%2==0){
// console.log('当前是偶数');
// }else{
// console.log('当前是奇数');
// }
// if(isNaN(number%2)){ //如果是NaN
// console.log(`当前输入出错`);
// }else if(number%2==0){
// console.log('当前是偶数');
// }else{
// console.log('当前是奇数');
// }
//利用NaN加任意数值得到都是NaN
if(!(number%2+Infinity)){ //如果是NaN
console.log(`当前输入出错`);
}else if(number%2==0){
console.log('当前是偶数');
}else{
console.log('当前是奇数');
}
if else的嵌套
if else允许多层嵌套的
if(条件1){
if(子条件1){
满足子条件1执行的代码
...
}else if(子条件2){
满足子条件2执行的代码
}else{
不满足子条件执行的代码
}
}else{
不满足条件1执行的代码
}
//输入一个值判断奇偶
var number = prompt()
//判断是否输入出错
if(number == ''){
console.log('输入内容不允许为空');
}else if(!isNaN(Number(number))){
//当前不是NaN
if(number%2==0){
console.log('当前为偶数');
}else{
console.log('当前为奇数');
}
}else{
//当前是NaN的情况
console.log('输入错误');
}
if else 支持多层嵌套 一般我们的嵌套不会超过俩层
if else 一些简化操作
当你的if 块和或者else块只有一行代码的时候是可以省略{}的
if(1>2)
console.log('你好')
else if(2>3)
console.log('世界')
else
console.log('hello world')
每句代码的结束是可以有分号 可以没有分号的 但是一般建议加上;(后续我们需要减少对应的编写的文件的大写我们会把所有的js在一行)
switch case
switch(值表达式){
case 值1:
执行的代码
break;
case 值2:
执行的代码
break;
defulat:
上面都不满足 执行的代码
}
//根据输入的值判断对应的执行的操作
// 1 打印游戏 2 打印睡觉 3 打印吃饭
var number = prompt() //字符串
//switch里面采用的是=== 类型必须相等
//在switch 如果没有break 他会从满足条件那句开始直到最后
//break 退出 当前这个switch不执行了
switch(number){
case '1':
console.log('游戏');
break;
case '2':
console.log('睡觉');
break;
case '3':
console.log('吃饭');
break;
default:
console.log('活着');
}
switch支持多个值
switch(number){
case '1':
console.log('游戏');
break;
case '2':
console.log('睡觉');
break;
case '3': case '4': case '5':
console.log('吃饭');
break;
default:
console.log('活着');
}
switch支持嵌套
//支持嵌套
switch(1){
case 1:
switch(2){
case 2:
console.log('我是2');
break;
default:
console.log('hello');
}
break;
default:
console.log('default');
}
if else 和switch的对比
if else 常用于区间判断 switch case用于值判断(枚举判断)
if else的效率低于switch case(用空间换时间)如果当前只有某个值的判断建议使用switch
总结
- if else 是用于区间判断 switch case是用于值判断
- switch case里面使用的判断是恒等判断 (支持所有类型的值)
- if else 支持嵌套 switch case也支持嵌套 (一般建议不要嵌套俩层以上)
- if 可以单独用
- if 的多分枝采用 else if来实现
- 对应的switch 里面的多分支采用多个case连用
- if (else if 、else)后面的代码如果只有一行那么可以省略{} 但是我们一般不建议省略
- if 里面的条件表达式返回的是对应的boolean类型的值 如果当前的式子不是条件表达式 他会自动转换boolean类型
- if else的效率低于switch case(用空间换时间)如果当前只有某个值的判断建议使用switch(枚举上一般使用switch)