1、数据类型转换(***)
显式转换:
1、转字符串:2个
① xx.toString();xx不能是undefined和null,报错,两者不能使用 . 去操作
② String(xx);万能的,没用:完全等效于隐式转换,还不如+"",一般来说两个都不用,页面上获取到的数据都是字符串
2、转数字:3个
①字符串 to 数字:parseInt/Float(str);
从左向右,依次读取每个字符,碰到非数字字符就停止转换,如果一开始就不认识,则为NaN
Int不认识小数点,Float认识第一个小数点
②Number(xx);//万能的,没用:完全等效于隐式转换,还不如-0 *1 /1 %1
3、转布尔:1个
Boolean(xx);//万能的,没用:还不如!!x
***只有6个为false:0,"",undefined,null,NaN,false,其余都为true
一定不会手动使用此方法,但是在某些地方会自动带有此方法: ①分支条件;②循环条件;以后不管我在分支条件和循环条件之中写的是什么,只需要管为true还是false
隐式转换:一般都出现在运算符和表达式中
2、运算符和表达式:(****)
1、算术运算符:+ - * / %(*)
隐式转换:默认转为数字,再运算
特殊:①+运算,只要碰上一个字符串,两边都会悄悄的转为字符串(悄悄调用了一个方法,我们程序员看不见String()),再拼接
②- * / %,只要是纯数字组成字符串,也可以转为数字(悄悄调用了一个方法,我们程序员看不见Number())
2、比较/关系运算符:> < >= <= == != === !==(*)
返回的结果:布尔值:true、false
隐式转换:默认一切都转为数字,再比较大小
特殊:①如果参与比较【两个都是字符串】,按位pk每个字符的十六进制unicode号(十进制ASCII码) (0-9<A-Z<a-z<汉字)
汉字第一个字:一:4e00(ascii码:19968) 最后一个字:龥:9fa5(ascii码:40869)
② NaN,参与任何比较运算结果都为false,解决:!isNaN(x)
x是一个数字,结果true;x是一个NaN,结果就为false
③undefined==null; 问题:null==undefined结果为true,区分不开undefined和null
解决:全等===:数值相同 并且 数据类型也要相同,换句话说,不再带有隐式转换
!==:不带隐式转换的不等比较
//String()的执行原理:任何东西都可以转为字符串
function String(x){
if(x===null){
console.log("null");
}else if(x===undefined){
console.log("undefined");
}else{
console.log(x.toString());
}
}
3、逻辑运算符:(*)
&&:全部条件都为true,结果才为true;只要有一个为false,结果就为false
||:全部条件都为false,结果才为false;只要有一个为true,结果就为true
!:颠倒bool值
特殊:短路逻辑:只要前一个条件已经可以得出最终结论,则后续条件不会再执行
&&:如果前一个条件满足,则后一个操作才执行,如果前一个条件不满足,则后一个操作不执行
实现了一个【简单】的分支:目的:简化if(){},操作只能【用一句话】
语法:条件&&(操作);
举例:if(total>=500){total*=0.8}
total>=500&&(total*=0.8)
||:两个值中二选一 - 老IE(6/7/8)兼容
4、位运算:
左移:m<<n,读作m左移了n位,m*2的n次方 - 缺点:底数只能是2
右移:m>>n,读作m右移了n位,m/2的n次方 - 缺点:底数只能是2
5、赋值运算:+= -= *= /= %= ++ --( *)
一句话完成了两个操作,先运算再赋值回去。比如:i++ => i+=1 => i=i+1;
递增 vs 累加
递增:i++,每次只能加1
累加:i+=n,每次加几由我们自己决定
++i 和 i++ 的区别?
1、单独使用时,放前放后无所谓都一样
2、如果参与了别的表达式,变量中的值都会+1。
前++,返回的是加了之后的新值; 后++,返回的是加了之前的旧值
6、三目运算 - 简化if...else if...else if...else(*)
如何使用:
1、条件?操作1:默认操作;
2、条件1?操作1:条件2?操作2:条件3?操作3:默认操作;
特殊:
①只能完成【简单】的分支 - 操作只能有一句话,其实以后很多分支里面可能真的就只有一句话
②默认操作不能省略 - 会报错
扩展
1、计算时会带有摄入误差: 解决:
var str=num.toFixed(保留小数位数);
按小数位四舍五入,但是返回的会是一个字符串。
2、获取第一个字的ascii码:
var ascii=str.charCodeAt(0);