day2 运算符和分支结构
一、一元运算符
// ++ --
1.字符串类型 对于字符串来说 ++ -- 会自动进行类型转换
var str='2334'
str++//str=Number(str)+1
console.log(str)//2335
var str1='abc'
str1++//无法转换成数值,也就是转换不成功的string类型 就会变为NaN
console.log(str1)//NaN
2.布尔类型
var bol=true //true为1 false为0
bol++//布尔类型转换成number
console.log(bol)//2
3.null类型
var no=null//转成布尔是false然后转成number是0
no--//null先转换成布尔类型然后再转换成number类型
console.log(no)//-1
4.undefined类型
var und
und--//undefined转换不成功 结果是NaN
console.log(und)//NaN
5.number类型
var num=10
console.log(num++)//10
console.log(++num)//12
console.log(num--)//12
console.log(--num)//10
console.log(num)//10
复杂的自增自减
var str1='123'
布尔类型转换
var bool=Boolean(str1)//true
console.log(bool--)//1
console.log(--str1)//122
var str2=str1 +'ab'//123ab
console.log(str2--)//NaN
一元运算符只能和变量一起用,不能出现其他运算符
var num1=10
var bool1=num1
console.log(num1++)//10
console.log(num1--)//11
console.log(bool1++)//10
console.log(bool1)//11
console.log(Boolean(bool1))//true
var yes='null'
console.log(yes++)//NaN
console.log(Boolean(yes))//false
var obj=null
var bool2=Boolean(obj)//false
console.log(obj--)//0
console.log(++bool2)//false 1
console.log(obj)//-1
console.log(Boolean(obj))//true
二、比较运算符 关系运算符
== 返回的都是Boolean类型 要么是true要么是false
console.log(null==undefined)//true 比较的是值相等
console.log(Boolean(null)==Boolean(undefined))//true
> < number 直接比较大小
number和Boolean比较大小是将布尔类型转换换成number
number和字符串类型比较 如果字符串储存的是数值,就是数值比较,如果字符串储存的是字符串,自动转number类型,转不了就是NaN
字符串和字符串比较 转换成ASCII码进行比较 每个字母都有固定的编码,区分大小写
a 97 / A 65 / 0 48
console.log(true>3)//false true=1<3
console.log(true==1)//true
console.log(null==false)//false null不会自动转换成Boolean
console.log(undefined==false)//false undefined也不会自动转换boolean
>= <= 只要满足其中一条
console.log(true>=1)//true
console.log(false<=1)//true
!= 不等于
console.log(2!=3)//true
赋值
var b=10
var a=b++
console.log(a)//10
var c=++b
console.log(c)//12
NaN特性 不能进行比较 返回结果false
var na=Number('ABC')
console.log(NaN==Number('ABC'))//false
console.log(na==na)//false
console.log(na==NaN)//false
恒等=== 不仅要比较值还要比较地址 ==是比较值
var a='123'
var b=123
console.log(a==b)//true
console.log(a===b)//false
三、逻辑运算符
与&& 同true则为true 其他是false
与&& 所有条件都是true的时候返回的才是true
console.log('A'<'a' && 2>1) //true
console.log('A'>'a' && 2>1)//false
或|| 一个是true就是true
console.log('A'<'a' && 2>1) //true
console.log('A'>'a' && 2>1)//true
!非 取反 true变false false变true
console.log(!('A'>'a'))//true
console.log(!('A'<'a'))//false
undefined转换为number是NaN
undefined值不需要转换
var number1,number2=10
console.log(number1!=number2 && number1<number2)//false
console.log(number1!=number2 || number1<number2)//true
console.log(number1<number2 || !(number1<number2))//true
验证用户名和密码
var uname='rose'
var password='jack'
console.log(uname==='rose')//true
console.log(uname=='rose' && password==='jack')//true
console.log(uname=='rose' || !(password=='jack'))//true
password=123
console.log(uname=='rose' && password==='123')//false
console.log(1&&2)//true
console.log(""||3)//true
console.log(''||0)//false
四、三元运算符 三目运算符
表达式 ?true的结果 :false的结果
console.log(!0) ?10 :20 //非0为true 10
console.log(1!=1) ?10 :20 //false 20
var num = 1!=1 ?10 :20
console.log(num ?'a' : 'b')//a
var num1= 1!=1 ?'a' : null
console.log(num1 ?'a' :'b')//b
var num3='a'>'B' ?12+'3' :24/2
console.log(num3)//123
console.log(typeof num3)//string
2怎么快速变成8
位移运算 针对2进制
10 1000
console.log(2<<2);
1+1 和 1-1 哪个运算速度快
1-1快因为进位需要时间
五、if分支
浏览器解析度结构是顺序结构 从上到下 从左到右
if(布尔类型表达式){
分支1
}else{
不满足上述条件进入else
}
如果我有5元钱 我就买冰激凌 如果没有我就去搬砖
var money=10
if(money>=5){
console.log("买冰激凌")
}else{
console.log("搬砖")
}
多个分支 一旦进行其中一个分支就不会再进行下一个
money=200
if(money>200){
console.log("去玩耍")
}else if(money>100){
console.log("买零食")
}else{
console.log("去搬砖")
}
分支块里执行的语句只有一句的时候,就可以省略对应的{}
循环结构 多个循环
件会找最先满足的if块 都不满足进入else
保持缩进 代码规范 方便他人阅读
不建议不写{}
分支语句的嵌套 无限嵌套 但是嵌套的越多,时间复杂度就越大 执行越慢
var t1= 10!=='10'//true
var t2= 20!=='20' ?0 :1 //0 false
var t3= 30+'10'==3010 ?null :10 //null false
if(t1){
console.log("进入第一个if")
if(t2){
console.log("进入第二个if")
if(t3){
console.log("进入第三个if")
}else{
console.log("进入第三个else")
}
}else{
console.log("进入第二个else")
}
}else{
console.log("进入第一个else")
}
满足第一个 不满足第二个进入第二个的else中 没机会进入第三个了
六、switch分支
switch 属于分支结构
if里面的表达式为Boolean类型表达式
switch为值表达式 undefined 确定的值
swith和case一起使用
break 跳出这个switch块
当不存在break的时候他会从匹配的选项走到底
js的switch支持任意类型值 但不支持NaN
case 后面跟有实际值
switch(值表达式){
case 值1:
case 值2:
case 值n:
default:
}
var a
switch(a){
case undefined:
console.log("一条语句")
break;
case 'undefined':
console.log("undefined 的string类型")
default:
console.log("默认语句")
break;
}
判断一个成绩
var s=59
switch(s){
case 60:case 59:case 58:
console.log("你及格了")
break;
}

浙公网安备 33010602011771号