运算符
算术运算符
+ - * / % ++ --
-
除了加法的所有运算全部会先转为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'
当出现对应的! 对应的结果将原本的结果取反就可以了
赋值运算符
= += -= /= *= %=
赋值运算符的优先级最低,也就是属于最后执行的(赋值操作是最后操作)
位移运算符(进位补零)
<< >>
表达式概念
表达式是由对应的值(变量)和运算符构成的一个式子
由对应的算术运算符组成的式子叫做算术表达式(返回对应的值)
由对应的逻辑运算符组成的式子叫做逻辑表达式(返回对应的值)
由对应的比较运算符组成的式子叫做条件表达式(返回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(`当前输入的是偶数`);
}
if(!(number%2) && number%2!=0){ //如果是NaN 不是0
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(`当前是奇数`);
}
多分支结构(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;
case 值3:
执行的代码
break;
default:
上面的都不满足 执行的代码
}
示例
//根据输入的值判断对应的执行的操作
//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 case(枚举上一般使用switch)