目录
一、数据类型转换
1、隐式转换
多半都在运算符之中。
2、强制类型转换
①转字符串(2种方式)
Ⅰ xx.toString();
undefined和null不能使用.去调用任何的属性和方法,因为它们不是对象。
Ⅱ String(xx);
万能的,但是没什么用,千万不要手动使用,完全等效于隐式转换。
②转数字
ⅠparseInt():
Ⅱ parseFloat();
Ⅲ Number();
③转布尔
Boolean(xx);
万能的。任何类型都可以转为一个布尔值。
简化版写法:!!xx
0, “ ”,undefined,null,NaN,false(这六个值得结果为false,其余都为true)。
注意:记住为false的情况,在循环或分支的条件判断中都会带有此隐式转换,隐式转换为布尔值。
二、运算符和表达式
1、算术运算(js第一周笔记1)
2、比较运算
> < >= <= == != === !==
结果都为布尔值(默认隐式转换,左右两边都会悄悄转为数字再比较)
特殊:
①如果左右两边参与比较的都是字符串,则是按位比较每个字符的十六进制的unicode号(十进制为ascii码)
0-9<A-Z<a-z<汉字
汉字的unicode:中文字符集unicode编码范围
汉字的第一个字:一(unicode:4E00)-(ascii:19968)
汉字的最后一个字:龥(unicode:9fa5)-(ascii:40869)
②NaN参与任何比较运算结构都为false(js第一周笔记2)
③undefined == 0
问题:==区分不开undefined和null,怎么才能区分开?
undefined===null
全等:===,要求值和数据类型都要相同,换句话说,就是不再带有隐式转换
!==,不带隐式转换的不等比较
String()方法的底层原理:
function String(x){
if(x===null){
return "null";
}else if(x===undefined){
return "undefined";
}else{
return x.toString();//return 返回
}
}
3、逻辑运算
(js第1周笔记2-扩展)
&&与 ||或 !非
特殊:短路逻辑,只要前一个条件已经可以得出最后结论,则后续条件不再执行。
①&&短路
如果前一个条件为true,后一个操作才执行
如果前一个条件为false,后一个操作不执行简化了简单的分支:if(条件){操作}
语法: 条件&&(操作)
注意:操作只能有一句话,能用短路分支就不用if分支。
//before
if(total>=500){
total*=0.8;
}
//after
total>=&&(total*=0.8);
②||短路
如果前一个条件为true,不需要执行后一个
如果前一个条件为false,需要执行后一个
使用场景:两个值二选一 - 后期做浏览器兼容性(老IE)
e=e||window.event;
4、位运算
左移:m<<n,读作m左移了n位,相当于m*2的n次方
右移:m>>n,读作m右移了n位,相当于m/2的n次方
缺点:底数永远只能是2
5、赋值运算
一句话执行了两个操作,先运算,再赋值
+ = -= *= /= %= ++ --
何时使用:只要取出变量中的值,在做计算,之后还要在保存回去时,就要试用赋值运算
递增:i++; 每次只能+1
累加:i+=n; 每次想加几
小重点(笔试题):++ 分为 ++i 和 i++
①单独使用时,没有参与别的表达式,放前放后都一样
②如果参与了别的表达式:
Ⅰ 变量中的值其实都会+1
Ⅱ ++i,返回的是递增后的【新值】
Ⅲ i++,返回的是递增前的【旧值】
6、三目运算
简化分支:if(){}else{} if(){}else if()else{}
①条件?操作1:默认操作;
②条件1?操作1:条件2?操作2:默认操作;
注意:只能简化简单的分支,三目运算的操作也只能有一句话。默认操作不能省略。
扩展:
1、舍入误差
num.toFixed(n);//带有四舍五入的功能,并能按传入的n保留n位小数
小缺陷:结果会变成一个字符串,推荐搭配上parseFloat进行只用
parseFloat(num.toFixed(n));
2、获取i的一个字符的ascii码
var ascii = str.charCodeAt(0);