Day6
1、***数据类型转换:
1、强制转换
1、转字符串:var str=x.toString();//x不能是undefined和null - undefined和null不能使用.操作
var str=String(x);//万能的,完全等效于隐式转换,还不如+""
不重要:页面上一切数据的数据类型都是字符串
2、*转数字:
1、*parseInt/Float(str);//专门为字符串转为数字准备的
原理:从左向右,依次读取每个字符,碰到非数字字符则停止,如果一来就不认识则为NaN
Int不认识小数点 Float认识第一个小数点
2、Number(x);//万能的,完全相当于隐式转换,还不如-0 /1 *1 %1
3、转布尔:
Boolean(x);//万能的,任何人都可以转为布尔,绝对不会手动使用,还不如:!!x
***只有6个会为false:0,"",undefined,null,NaN,false,其余都为true
在分支/循环的条件之中,自动隐式转换,以后不管代老师在条件里面写的有多奇怪,你都要知道他会悄悄的变成一个布尔值,你只需要判断是不是那6个
2、隐式转换:都是出现在运算符之中
2、****运算符和表达式
1、*算数运算符:+ - * / %
特殊:1、%:取余,判断奇偶性
2、具有隐式转换,默认转为数字,在运算
undefined->NaN
null->0
true->1
false->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;//false
全等:=== - 要求数值相同,并且数据类型也要相同,不再带有隐式转换
!== - 不再带有隐式转换的不等比较
重写String方法,看出==和===的区别
function String(x){
if(x===undefined){
return "undefined";//return->返回,后面跟着的就是返回的结果
}else if(x===null){
return "null";
}else{
return x.toString();
}
}
3、*逻辑运算符:
作用:综合比较,结果也是为布尔值
隐式转换:左右两边都会悄悄转为布尔值,再综合比较结果
&&:全部满足,才满足
一个不满足,则不满足
||:全部不满足,才不满足
一个满足,则满足
!:颠倒布尔值
特殊:短路逻辑:如果前一个条件,已经可以得出最终结论了,没有必要看后续
&&短路:如果前一个条件满足,才执行后一个操作,如果前一个条件不满足,则不管后续操作
目的:简化【简单的】分支:
1、一个条件一件事,满足就做,不满足就不做:if(){}
2、【简单的】- 操作只能有一句话:多句操作导致我们以后维护项目时观看/阅读代码不方便,往往以后很多操作可能就只有一句话
语法:条件&&(操作);
||短路:实现浏览器兼容性问题:二选一
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++
6、*三目运算:简化if...else... if...else if...else
语法:看条件满足否,满足则作操作1,不满足则作默认操作
1、条件?操作1:默认操作;
2、条件1?操作1:条件2?操作2:默认操作
特殊:
1、默认操作不能省略,省略后会报错
2、如果操作有多句话,还是推荐使用if分支,多句操作再同一行不方便以后维护
总结:
if === &&短路
if...else === 三目运算
if...else if...else === 三目运算
操作多句话使用以上三个 操作一句话使用以上3个
扩展:
1、计算机很笨,牛逼在快和记忆力好(机械硬盘-永久保存,固态硬盘-只能保存10年):
计算机带有摄入误差:
解决:num.toFixed(d);//d代表保留的小数位数,会四舍五入运算
缺陷:返回的是要给字符串,建议搭配上一个parseFloat使用最好
2、获取字符串中第一个字符的ascii码:str.charCodeAt(0);
作业:要求:不允许使用if分支,只能使用短路 和 三目、老规矩保留
1、PPT24页 4道题
-1.应用题:买菜找零,买了1.6元的菜,给了老板2元钱,问:应找零多少钱
-2.如何解决舍入误差?
- 3.判断奇数、偶数:请用户输入一个数字,将数字%2如果返回1,说明是奇数,否则说明是偶数
-4.笔试题:判断输出结果:
2、PPT29页 第2题
-2.比较价格:请用户输入一个商品价格:如果价格>6888,说明涨价了;如果价格<6888,说明降价了。
3、PPT35页 2道题
-1、页面中弹出一个输入提示框,读取一个文本输入,控制台中输出它是“一个英文字符”吗?是“一个数字”吗?是“一个汉字”吗?
-2、页面中弹出一个输入提示框,接收用户输入的一个数字表示年份,控制台中输出这个年份是否为闰年。
注:闰年的判断公式为:
1.年份能被4整除,且不能被100整除的是闰年。
2.年份能被400整除的是闰年。
4、PPT37页 2道题
-1、价格打折:请用户输入充值金额︰如果用户输入的金额>=100元,则享受八折。输出实际应收金额
-2、请用户输入一段留言:如果输入了,就输出留言的内容。否则就输出“主人很懒,什么也没留下”
5、PPT43页 第2题
2、请用户输入工资,涨薪1000后,输出涨薪后的结果。
6、PPT49页 2道题
1、弹出一个输入提示框,请用户输入一个表示工资的数字,按如下规则在控制台中输出该工资金额的级别:
(1)大于等于20000,显示“高工资”
(2)小于20000大于等于8000,显示“中高工资”
(3)小于8000,显示“普通工资”
2、体重健康指数(克莱托指数)计算公式如下∶体重(Kg)➗身高的平方(M)
20-25正常,20以下偏瘦,25以上偏胖。
例如:某人是60kg,1.7m,那就是︰60÷1.72=20.76,属于“正常”体重;
编写一个函数,接收体重和身高作参数,返回判定结果。
7、三目运算版 - 开关门
Day7
复习
1、数据类型的转换
强制转换:
1、转字符串:
x.toString();//x不能是undefined和null
String(x);//万能的,还不如+""
页面上一切数据都是字符串类型---所以一般不会用到