运算符
算术运算符
+ - * / % ++ --
-
除了加法,其他的运算都会先转为number再进行运算(Number),如若转换不成功则会出现NaN
-
NaN与数值相加结果也为NaN
-
加法运算中如果有一方的值为字符串,那么会进行字符串拼接
-
++前置和后置的区别是 前置先执行++ 后置后面执行++
-
在运算中++不能放在()前,会报错
-
运算顺序:先() 后++或者-- 再* / % 最后+-
逻辑运算符
&& || !
-
&&运算:若两方都为true,那么值取最后一个;有一方为false值就取它
-
||运算:一方为true则取第一个true,都为false就取最后一个false
-
!运算:值取反
比较运算符
> < >= <= != == === !==
-
当出现的是><号,会自动进行相关的转换(number)
-
字符串比较会比较对应的ASCLL码值(a 97 A 65)
-
==只比较值,例如字符串‘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
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(条件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')
每句代码的结束可以有分号可以没有分号,一般建议加上
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(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)