隐式转换
var a = "2", b = 2;
console.log(a + b ) // 22
console.log(a == b) // true
console.log(a * b) // 4
console.log(a - 0 + b) // 4
console.log(a / b) // 1
console.log(a % b) // 0
数字和字符串相加,数字会隐式转换为字符串来拼接
数字和字符串相减,字符串转成数字,如果转换不成功得到NaN
* / % 都具有减号这样的功能
==具有隐式类型转换的功能,会把数字转成字符串再比较
===不具有隐式转换功能
显式转换
parseInt()、parseFloat()、Number()、toString()、String()
toFixed()可以用来将数字保留几位小数,并且数据类型变为字符串
var a = 2, b = '2';
a + parseInt(b) === 4 // true
parseInt("20b3") // 20
parseInt("b20") // NaN
parseInt("20.99") // 20
parseFloat("11.22.33") // 11.22
parseFloat("11.212be") // 11.212
Number() 是一个非常严格的转换,只要不满足数字,都会直接转换为NaN
Number("20b3") // NaN
Number("b20") // NaN
Number("20.99") // 20.99
Number("20") // 20
NaN:Not a Number
方法 parseInt() 和 parseFloat() 在不能解析指定的字符串时就返回NaN
isNaN(num)函数,该函数判断num变量的值是否是NaN,是NaN返回true,数字返回false
ECMAScript 中可用的 3 种强制类型转换如下:
Boolean(value) - 把给定的值转换成 Boolean 型;
Number(value) - 把给定的值转换成数字(可以是整数或浮点数);
String(value) - 把给定的值转换成字符串;
运算符的简写
赋值运算简写
+=、-=、*=、/=
a = a + 1 a += 1
a = a - 1 a -= 1
a = a * 1 a *= 1
a = a / 1 a /= 1
a++ a += 1 a = a + 1
a-- a -= 1 a = a - 1
自增自减前置后置是不一样的,前置是先加后用,后置的先用后加。
JS的小数运算有时候并不是那么精确,但是损失的精度一般也在可承受范围之内
alert(0.7+0.1); //输出0.7999999999999999
alert(0.6+0.2); //输出0.8;
if — 判断逻辑,如果
if(true){
//会执行的语句
}
if(false){
//会跳过不执行的语句
}
if(判断条件){ //当if括号中结果为true时执行语句1,否则执行语句2
//语句1
}else{
//语句2
}
if(判断条件1){ //当条件1结果为true时执行语句1
//语句1
}else if(判断条件2){ //当条件1结果为false而且条件2结果为true时执行语句2
//语句2
}else{ //当条件1条件2结果都为false时执行语句3
//语句3
}
if括号中只需要布尔类型值。那么在if判断中,所有的数据类型都会被隐式转换为布尔类型。
注意:0、-0、null、""、false、undefined 或者 NaN在if条件里结果为false
隐式类型转换
除了+运算符具有两层含义以外,- * /只有数学意义
所以当进行- * /运算的时候默认会将运算符两侧的数据类型隐式转换为数字类型,再进行运算。
var a = 2, b = "2";
if(a == b){
alert("a和b相等"); // 会弹
}
if(a === b){
alert("a和b相等"); // 不会弹
}
if(1 == true){
alert("数字1是true");
}
if(a = b){
alert("a和b相等");
}
//一个等号代表赋值操作,结果为等号右边的值
switch case 多分支语句
switch(语句){ //语句的结果与每一条case内容进行匹配
case 1:
alert(1);
break;
case 2:
alert(2);
break;
case 3:
alert(3);
break;
default:
alert(0);
}
注意switch的应用场景(有多个确定值需要判断的时候);
注意case穿透,要加break语句(如果程序没有发现break语句,那么解析器会继续向下解析);
可以运用case穿透进行代码缩减
var a = 1;
switch(a){
case 1:
alert(1);
case 2:
alert(2);
case 3:
alert(3);
default:
alert(0);
}
每一个alert都会被执行,而且alert会阻断程序进程
switch (表达式) {
case 值1:
当表达式匹配上当前这个值1的时候执行的代码
break
case 值2:
当表达式匹配上当前这个值2的时候执行的代码
break
....
default:
如果前面的case一个都不满足就走这里
}
switch语句更适用于一个表达式有多个分散值的情况.
如果是区间判断if更合适,但是很多时候if和switch是可以互相替换的
switch比较都是全等匹配,没有类型转换