1、***数据类型转换: 1、强制类型转换: 1、转字符串: 1、var str=x.toString();//xx不能是undefined和null,因为undefined和null不能使用.去做任何操作的 2、var str=String(x);//万能的,任何人都可以转为字符串,不重要: 不重要的原因: 1、页面上一切的数据类型都是字符串 2、String(); 完全相当于隐式转换,还不如+""
2、*转数字:
1、parseInt/Float(str);//专门为字符串转为数字准备的
原理:从左向右依次读取每个字符,碰到非数字字符则停止转换,如果一来就不认识则为NaN
Int不认识小数点,Float认识第一个小数点
2、Number(x);//万能的,任何人都可以转为数字,不重要 - 完全相当于隐式转换,还不如-0 *1 /1
3、转布尔:
Boolean(x);//万能的,任何人都可以转为布尔,绝对不会手动使用,还不如!!x
***只有6个会转为false:0,"",undefined,null,NaN,false,其余的都是true
在分支、循环条件中,其实就会带有布尔的隐式转换,以后【代老师不管在条件里写了什么】,你都不要太在意,只需要知道是true还是false即可
2、隐式类型转换:都是出现在运算符之中的
2、****运算符和表达式: 1、算术运算符:+ - * / % 特殊:1、%:取余,俗称模,判断奇偶性 2、隐式转换,默认转为数字,再运算 true->1 false->0 undefined->NaN null->0 特殊:1、+运算,碰到字符串,拼接 2、-/%,字符串也可以转为数字,但是纯数字组成的字符串才行,但凡包含一个非数字字符则为NaN
2、*比较/关系运算符:>,<,>=,<=,==,!=,===,!==
结果:布尔值
隐式转换:默认,转为数字,再比较大小
特殊:
1、如果参与比较的左右两边都是字符串,则按位PK每个字符的十六进制的unicode号(十进制ascii码)
0-9<A-Z<a-z<汉字
汉字的第一个字:一(unicode号:4e00 - ascii码:19968)
汉字的最后一个字:龥(unicode号:9fa5- ascii码:40869)
2、NaN参与任何比较运算,结果都是false,所以我们没有办法使用普通的比较运算来判断x是不是NaN
解决:!isNaN(x);
3、undefined==null;//true
解决:undefined===null; 才能区分出两者
=== !==:不在带有隐式转换的比较运算
要求数值相同,并且数据类型相同
//想要区分undefined和null必须使用===
function String(x){
if(x===null){
return "null";
}else if(x===undefined){
return "undefined";
}else{
return x.toString();
}
}
console.log(String(1));
console.log(String(true));
console.log(String(null));
console.log(String(undefined));
3、*逻辑运算符:
&&:全部满足,才满足
一个不满足,就不满足
||:全部不满足,才不满足
一个满足,就满足
!:颠倒布尔值
特殊点:短路逻辑:如果前一个条件,已经能够得出最终结论,则不必看后续
&&短路:如果前一个条件满足,才执行后一个操作,如果前一个条件不满足,则不管后续操作
目的:简化【简单的分支】if(条件){操作},1、一个条件一件事,满足就做,不满足就不做 2、操作必须只有一句话的情况
语法:条件&&(操作);
案例:if(total>=500){total*=0.8;}
total>=500&&(total*=0.8);
if的性能是所有分支结构中最差的
||短路:浏览器兼容,实现二选一操作 - 对于我们有点早,提前了解即可
以后我们会见到这个语法:
e=e||window.event;
4、位运算:
左移:m<<n,读作m左移了n位,翻译:m*2的n次方
右移:m>>n,读作m右移了n位,翻译:m/2的n次方
个人不推荐:因为底数只能是2
5、*赋值运算:+= -= *= /= %=
一个操作两件事,先计算,再赋值回去
i++;//递增,每次固定只能+1
i+=1;//累加,每次加几由我们程序员自己决定
i++; === i+=1; === i=i+1;
鄙视题:++i 和 i++的区别?
单独使用,放前放后无所谓,效果一样
但是如果参与了别的表达式,变量中的值都会+1
返回不同:前++返回的是加了过后的新值
后++返回的是加了之前的旧值
6、***三目运算:简化if...else... 和 if...else if...else
语法:
1、条件?操作1:默认操作;
2、条件1?操作1:条件2?操作2:默认操作;
特殊:
1、只能简化简单的分支 - 操作只能写一句话,不推荐你写多句,不方便维护,以后往往我们的操作真的只有一句话
2、默认操作不能省略
总结:
if(){} ===> &&短路
if(){}else{} ===> 三目
if...else if...else ===> 三目
扩展: 1、计算机很笨,牛逼在快和记忆力好:计算机带有舍入误差,我们不可能修它,浏览器提供了解决方案: var str=num.toFixed(d);//d代表保留的小数位数,会四舍五入计算,但是它也有一个唯一的缺陷:结果返回一个字符串,所以建议搭配上parseFloat食用更佳
2、如何获取第一个字的ascii码:
var asc=str.charCodeAt(0)
作业规则:老规矩依然保留(封装函数、恶意输入),新规矩:不允许使用if分支,要么短路要么三目
作业: 1、PPT24页 4道题 2、PPT29页 第二题 3、PPT35页 第一题 4、PPT37页 两道题 5、PPT49页 两道题
6、金夫人项目 - 练手项目,1月9号上交
为什么要写静态页面:
1、不希望学了二阶段忘了一阶段
2、我们以后面试需要项目
3、提升代码速度
4、我们二阶段后期需要全栈开发(需要静态页面的支持)