*数据类型的转换
1、强制转换:3类
1、转字符串:
1、x.toString();
2、String(x);
不重要:1、页面上的一切数据默认都是字符串类型
2、*转数字:
1、parseInt/Float(str);
原理:从左向右,依次读取每个字符,碰到非数字字符则停止,如果一来就不认识,则为NaN,Float认识第一个小数点
2、Number(x);
3、转布尔:
Boolean(x);
***大部分情况都为true,只有6个为false:0,"",undefined,null,NaN,false
在分支、循环的【条件】之中,以后不管代老师写什么,他都会悄悄的转为一个布尔值,你只需要知道为不为这6个,不为这六个说是true
2、隐式转换:都出现在运算符之中
*运算符和表达式
1、*算术运算符:+ - * / %
特殊:
1、%,取余,俗称模,判断奇偶性
2、隐式转换:默认转为数字,再运算
true->1
false->0
undefined->NaN
null->0
特殊:1、+运算,碰上一个字符串,变拼接操作
2、-*/%,字符串也可以转为一个数字,前提是纯数字组成的,但凡包含一个非数字字符则为NaN,NaN参与任何算术运算结果都为NaN
2、*比较运算符:> < >= <= == != === !==
结果:布尔值
隐式转换:默认,转为数字,再比较大小
特殊:
1、如果参与比较的左右两边都是字符串,则按位PK每个字符的十六进制unicode号(十进制ascii码)
0-9<A-Z<a-z<汉字
2、NaN参与任何比较运算结果都为false,解决:!isNaN(x);
3、undefined==null;
区分:undefined===null;
=== !==:不带隐式转换的等值比较和不等比较,要求数值相同,并且数据类型也要相同
function String(x){
if(x===null){
return "null";
}else if(x===undefined){
return "undefined";
}else{
return x.toString();
}
}
3、*逻辑运算符:
&&:全部为true,才为true
一个false,则为false
||:全部为false,才为false
一个true,则为true
!:颠倒布尔值
特殊:短路逻辑:如果前一个条件,已经能够得出最终结论了,则不看后续
&&短路:如果前一个条件满足,则后一个操作执行,如果前一个条件不满足,则后一个操作不执行
目的:简化【简单的】if分支:1、一个条件一件事,满足就做不满足就不做 2、操作只能有一句话
简化:条件&&(操作);
原来:if(total>=500){total*=0.8}
现在:total>=500&&(total*=0.8)
||短路:如果前一个为true,后一个不看 - 实现浏览器的兼容性,二选一操作
e=e||window.event;
4、位运算:
左移:m<<n,读作m左移了n位,翻译:m*2的n次方
右移:m>>n,读作m右移了n位,翻译:m/2的n次方
垃圾:底数只能是2
5、*赋值运算:+= -= *= /= %=
一个操作完成两件事,先计算,再赋值回去
i++
i+=1
i=i+1
笔试题++i 和 i++的区别?
单独使用,两者没有区别。
如果参与了别的表达式,变量中的值都会+1
前++,返回的是加了过后的新值
后++,返回的是加了之前的旧值
<script>
var i = 0
++i
console.log(++i)
console.log(i)
//前++,返回的是加了过后的新值
//后++,返回的是加了之前的旧值
var me = 0
var sn = me++ + ++me + me++ + ++me + me++ + me++ + ++me
// 0 2 2 4 4 5 7
console.log(sn)
console.log(me)
var me = 2
var sn = ++me + me++ + me++ + ++me + ++me + me++ + me++
// 3 3 4 6 7 7 8
console.log(sn)
console.log(me)
var x = me++
console.log(x)
</script>
6、三目运算:简化if...else if...else if...else
语法:
1、条件?操作1:默认操作
2、条件1?操作1:条件2?操作2:默认操作
特殊:
1、默认操作不能省略
2、只能简化【简单的分支】 - 操作只能有一句话
汇总:
if(){} ===> &&短路
if...else ===> 三目
if...else if...else ===> 三目
扩展:
1、计算机很笨,虽然记忆能力很强(机械硬盘(永久保存)/固态硬盘(有效期10年)):计算机带有摄入误差,解决:num.toFixed(d);
缺陷:搭配上一个parseFloat()使用最好,返回的结果是一个字符串
2、获取字符串中第一个字符的ascii码:str.charCodeAt(0);
数字:48-57
大写字母:65-90
小写字母:97-122
汉字:19968(4e00)-40869(9fa5)