day02-运算符和分支结构
文章目录
一、一元运算符
<script>
//字符串类型,对于字符串类型来说自增或者自减会自动进行类型转换
var str = '10'
str++//str = Number(str) + 1 自动转换 从string转为number
console.log(str);
str = 'ab'
str++//NaN 对于转换不成功的string类型数据会变为NaN
console.log(str)
//布尔类型
var bol = false //1为true 0为false
bol++ //number类型 非0和NaN就是true 自动进行转换
console.log(bol)
//null类型
var no = null
no-- //自动转换对应boolean类型 然后再从boolean转为number
console.log(no)
//undefined类型
var und
und-- //undefined转换不成功 NaN
console.log(und)
//Number类型
var num = 10
console.log(num++)//10
console.log(num--)//11
console.log(++num)//11
console.log(--num)//10
console.log(num)//10
//复杂的自增 自减
var str1 = '123'
//Boolean布尔类型转换
var bool = Boolean (str1)
console.log(bool--)//1
console.log(--str1)//122
//123ab
var str2 = str1 + 'ab'
console.log(str2--)//NaN
//一元运算只能和变量与一起 不能出现其他的运算符
var num01 = 10
var bool01 = num01//10
console.log(num01++);//10
console.log(num01--);//11
console.log(bool01++);//10
console.log(bool01);//11
console.log(Boolean(bool01));//true
var yes = 'null' //字符串
console.log(yes++);//NaN
console.log(Boolean(yes));//false
var obj = null
var bool02 = Boolean(obj)
console.log(obj--);//0 obj-- === obj=obj-1
console.log(++bool02);//1
console.log(obj);//-1
console.log(Boolean(obj));//true
//将1进行减减后置 然后转换为boolean类型 再进行++ 最后打印这个number值
var num03 = 1
console.log(num03--);//1
var bool03 = Boolean(num03)
console.log(bool03);//false
//进行++ 进行-- 不管++是前置还是后置都是先转换
var und = null
console.log(und++); //0 先进行了转换 number
console.log(typeof und);//null对应是object number类型
</script>
二、比较运算符
比较运算符返回的都是boolean类型,要么是true要么是false
种类
. < > <= >= == === != =(赋值) NaN
== 和 ===
==比较的是值 ===比较的不仅是值还有地址(数据类型)
<script>
console.log(null == undefined) //true
console.log(null === undefined) //false
console.log(Boolean(null) = Boolean(undefined)) //true
</script>
比较方式
- number类型直接比较大小
<script>
console.log(1 < 2)//true
</script>
- number和boolean比较,将boolean转为number(0,1),false = 0,true = 1
<script>
console.log(true > 3); //false
console.log(true == 1); //自动转换是boolean转为number
console.log(true > false)
</script>
- number和string比较
如果string里面存储的是数值,对应的就是数值比较
如果string里面存储的是string,会自动转为number类型,转不了的话就是NaN
<script>
console.log(1 > '0') //true
var a = '1'
console.log(a > 0)//false,这里string变成NaN
</script>
- string之间的比较,比较的是ascii码,记住a是97,A是65
<script>
var num1 = 'A'
var num2 = 'a'
console.log(num1 > num2) //false
</script>
- NaN特性,不能进行比较,返回结果是false
<script>
var na = Number('ABC')
console.log(NaN==Number('ABC'));
console.log(na==NaN);
console.log(na==na);
</script>
- ==比较值 ===比较值得同时还要比较地址
<script>
var a = '123'//字符串
var b = 123//number
console.log(a==b);//true
console.log(a===b);//false
</script>
- null、undefined不会自动转为boolean类型
<script>
console.log(null==false);//null不会自动转为boolean类型
console.log(undefined==false);//undefined也不会自动转换布尔类型
</script>
三、逻辑运算符
种类
- 与 && 断路与&(不用,全检索一遍,效率变低)
同true则为true 否则反之 - 或|| 断路或|(不用,全检索一遍,效率变低)
由true则为true 同false则为false - 非!
四、三元运算符 三目运算符
格式
布尔类型表达式?true的结果:false的结果
<script>
console.log(10?10:20)//10
console.log(1!=1?10:20);//20
var number = 1!=1?0:null//null
console.log(number?'a':'b');//b
var number2 = 'a'>'B'?12+'3':45/2
console.log(number2);//123
console.log(typeof number2);//string
</script>
五、分支机构
if else
可以嵌套但是不建议多重嵌套,因为嵌套的越多时间复杂度越大
<script>
if(/*布尔类型表达式*/){
//分支一
}else{
//不满足条件的进入此分支
}
</script>
switch case
有确定的值使用这个,if else适合范围的
break:跳出这个switch块
不存在break的时候从上往下都要执行
switch不支持NaN
<script>
switch(值表达式){
case 值1:
case 值2:
...
default://默认的
}
</script>
六、拓展
- 2怎么快速变成8
移位运算 针对2进制的
<script>
console.log(2<<2) //本来是10 要变成1000 向左边<<进两位
</script>
- 1+1 1-1 运行哪个快
1-1运行快,不用进位