day06数据类型、三目运算

133 阅读3分钟

1、***数据类型转换: 1、强制类型转换: 1、转字符串: 1、var str=x.toString();//xx不能是undefined和null,因为undefined和null不能使用.去做任何操作的 2、var str=String(x);//万能的,任何人都可以转为字符串,不重要: 不重要的原因: 1、页面上一切的数据类型都是字符串 2、String(); 完全相当于隐式转换,还不如+""

	2、*转数字:
		1parseInt/Float(str);//专门为字符串转为数字准备的
			原理:从左向右依次读取每个字符,碰到非数字字符则停止转换,如果一来就不认识则为NaN
			Int不认识小数点,Float认识第一个小数点

		2Number(x);//万能的,任何人都可以转为数字,不重要 - 完全相当于隐式转换,还不如-0 *1 /1

	3、转布尔:
		Boolean(x);//万能的,任何人都可以转为布尔,绝对不会手动使用,还不如!!x
		***只有6个会转为false0""undefinednullNaNfalse,其余的都是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码:408692NaN参与任何比较运算,结果都是false,所以我们没有办法使用普通的比较运算来判断x是不是NaN
			解决:!isNaN(x);

		3undefined==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、我们二阶段后期需要全栈开发(需要静态页面的支持)