第一周复习补充

145 阅读2分钟

数据类型转换

转布尔:

Boolean(x);//万能的,任何人都可以转为布尔,不会手动使用的,还不如:!!x
   *只有6个会为false0,"",undefined,null,NaN,false,其余都为true
    在分支、循环的条件之中,以后不管写的是什么,都会悄悄的隐式转换为布尔值,只需要考虑为true还是为false

2、隐式转换:都是出现在运算符之中

运算符和表达式:

算术运算符:+ - * / %

特殊:1、%:取余,判断奇偶性
      2、隐式转换:默认转为数字,在运算
    true->1  false->0  undefined->NaN  null->0
    特殊:1、+运算,碰到字符串,拼接

      2、-*/%:字符串可以转为数字,但是纯数字组成才行,但凡包含一个非数字字符,则为NaN

比较运算符:> < >= <= == != === !==

结果:布尔值
隐式转换:默认,转为数字,再比较大小
特殊:1、如果参与比较的左右两边都是字符串,则是按位PK每个字符的十六进制unicode号(十进制ascii码)
0-9<A-Z<a-z<汉字:常识:汉字的第一个字:一:unicode:4E00 - ascii:19968
最后一个字:龥:unicode:9FA5 - ascii:40869

2NaN参与任何比较运算结果都是false,所以没有办法用普通的比较运算判断是不是NaN
    !isNaN(x);

3undefined==null;//true
    区分:undefined===null;
    === !==:不带隐式转换的等值比较和不等比较,要求数值相同,并且数据类型也要相同

function String(x){if(x===undefined){return "undefined";}else if(x===null){return "null";}else{return x.toString();}}

逻辑运算: && || !

&&:全部满足,才true/一个不满足,则false

||:全部不满足,才false/一个不满足,则true

!:颠倒布尔值

特殊:短路逻辑:如果前一个条件,已经能够得出最后结论了,则不看后续
&&短路:如果前一个条件满足,才执行后续操作,如果前一个条件不满足,则不管后续操作
目的:简化【简单的】分支:1、一个条件一件事满足就做,不满足就不做 if(){}	  
                        2、操作只能有一句话
条件&&(操作);
    举例:原来:if(money>=500){money*=0.8};
    现在:money>=500&&(money*=0.8);

||短路:浏览器兼容:二选一操作 
    e=e||window.event;

位运算:

左移:m<<n,读作m左移了n位,翻译:m*2的n次方
右移:m>>n,读作m右移了n位,翻译:m/2的n次方
缺点:底数只能2

赋值运算: += -= *= /= %=

一个操作两件事,先计算,在赋值回去。
i++ -> 递增:每次只会固定+1
i+=1 -> 累加:每次+几由我们程序员自己决定

i++ === i+=1 === i=i+1;

鄙视题:++ii++的区别:
    单独使用,放前放后无所谓,效果一样。
    但是如果参与了别的表达式,变量中的值都会+1
        前++返回的是加了过后的新值
        后++返回的是加了之前的旧值

三目运算:简化if...else/简化if...else if...else

语法:
    1、条件?操作1:默认操作;
    2、条件1?操作1:条件2?操作2:条件3?操作3:默认操作;

特殊:
    1、只能简化简单的分支 - 操作只能有一句话
    2、默认操作不能省略

总结:

if  ->  &&短路
if else  ->  三目
if else if else  ->  三目