d一.运算符
1.算术运算符 + - * / ++ --
除+以外的所有运算都会全部先转为number再进行运算,转换不成功出现NaN
一个数值和NaN相加得到的也是一个NaN
加法运算如果有一个值为字符串那么会进行字符串拼接
++ 前置和后置
前置先执行++ 后置后执行++
++ --不能放在() 之前
运算对应的顺序
先执行()里的内容 再执行 ++或者--操作 再执行对应的* / % 然后再执行+ -操作
2.逻辑运算符 && || !
&& 与 俩个都是true 则返回最后一个true 有一个是false就返回第一个false
|| 或 有一个true直接取第一个true 如果都是false取最后一个false
! 非 取反操作 将对应的真的变假的 假的变真的 返回的结果是一个boolean类型
3.比较运算符 > < >= <= != == === !==
当出现的是> <号他会自动进行相关的转换(number)
对应比较的都是字符串那么会比较对应的ascii码(A 65 a 97)
== 比较值 数值类型123和字符串123是相等的(NaN!=NaN)(undefined == null)
=== 基于==之上 除了比较值还要比较类型 123!='123' (undefined !== null)
当出现对应的! 对应的将原本的结果取反就可以了
4.赋值运算符 = += -= *= /= %=
【注意】赋值操作是最后操作
var a = 10
a+=10 //a=a+10 20
a*=10 //a=a*10 200
a/=10 //a=a/10 20
a-=10 //a=a-10 10
a%=2 //a=a%2 0
console.log(a);//0
5.位移运算符(进位补零) << >>
位移运算是将对应的数值转为二进制进行移位运算(将一个数值转为二进制使用除二取余法)
怎么快速把2变成8 后面补零
console.log(2<<2);
二.表达式概念
表达式是由对应的值(变量)和运算符构成的式子
由对应的算法运算符组成的式子 算法表达式(返回对应的结果)
由对应的逻辑运算符组成的式子 逻辑表达式 (返回对应的值)
由对应的比较运算符组成的式子 条件表达式 (返回boolean类型的值)
1.三目运算符(三元运算符) 条件表达式 ? true的结果:false的结果
示例
//如果8大于3那么返回对应的10 如果不大于返回20
var result = 8>3?10:20
var un
//如果对应的他填写是对应的一个变量或者值 那么他会将这个值直接转换为boolean类型
var a = un?'你好':'hello'
console.log(a);
var a = 100+20*50*0&&20+'hello'-12*8||undefined?(10+12)/10+10%2:(5+2)%2*15+16 //31
执行顺序:先算括号 再算* / % 再 + - 再逻辑运算 再三目运算符 再赋值
三.控制语句
控制语句是对应程序的一个控制,分为对应的条件控制语句和循环控制语句
条件控制语句是根据对应的条件来执行对应的代码
循环控制语句是根据对应的条件来执行多次重复的代码
1.条件控制语句
常见的控制语句 if else switch case
if else (根据对应的boolean条件值来进行判断 也就是说你传入的条件返回的不是boolean 他会转为对应的boolean类型)
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 的嵌套 (允许多层嵌套) 【注意】一般嵌套不超过2层
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块只有一行代码的时候可以省略{}
每句代码的结束可以没有分号,但是一般建议加上(后续我们需要减少对应的编写的文件的大小我们会把所有的js在一行) )
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:
上面都不满足 执行的代码
}
//switch里面采用的是=== 类型必须相等
//在switch 如果没有break 他会从满足条件那句开始直到最后
//break 退出 当前这个switch不执行了
//根据输入的值判断对应的执行的操作
// 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)