隐式转换
var a = \"2\", b = 2;console.log(a + b ) // 22console.log(a == b) // trueconsole.log(a * b) // 4console.log(a - 0 + b) // 4console.log(a / b) // 1console.log(a % b) // 0数字和字符串相加,数字会隐式转换为字符串来拼接数字和字符串相减,字符串转成数字,如果转换不成功得到NaN* / % 都具有减号这样的功能==具有隐式类型转换的功能,会把数字转成字符串再比较===不具有隐式转换功能
显式转换
parseInt()、parseFloat()、Number()、toString()、String()
toFixed()可以用来将数字保留几位小数,并且数据类型变为字符串
var a = 2, b = \'2\';a + parseInt(b) === 4 // trueparseInt(\"20b3\") // 20parseInt(\"b20\") // NaNparseInt(\"20.99\") // 20parseFloat(\"11.22.33\") // 11.22parseFloat(\"11.212be\") // 11.212Number() 是一个非常严格的转换,只要不满足数字,都会直接转换为NaNNumber(\"20b3\") // NaNNumber(\"b20\") // NaNNumber(\"20.99\") // 20.99Number(\"20\") // 20
NaN:Not a Number
方法 parseInt() 和 parseFloat() 在不能解析指定的字符串时就返回NaNisNaN(num)函数,该函数判断num变量的值是否是NaN,是NaN返回true,数字返回false
ECMAScript 中可用的 3 种强制类型转换如下:
Boolean(value) - 把给定的值转换成 Boolean 型;Number(value) - 把给定的值转换成数字(可以是整数或浮点数);String(value) - 把给定的值转换成字符串;
运算符的简写
赋值运算简写
+=、-=、*=、/=
a = a + 1 a += 1a = a - 1 a -= 1a = a * 1 a *= 1a = a / 1 a /= 1a++ a += 1 a = a + 1a-- a -= 1 a = a - 1自增自减前置后置是不一样的,前置是先加后用,后置的先用后加。
JS的小数运算有时候并不是那么精确,但是损失的精度一般也在可承受范围之内
alert(0.7+0.1); //输出0.7999999999999999alert(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的时候执行的代码breakcase 值2:当表达式匹配上当前这个值2的时候执行的代码break....default:如果前面的case一个都不满足就走这里}switch语句更适用于一个表达式有多个分散值的情况.如果是区间判断if更合适,但是很多时候if和switch是可以互相替换的switch比较都是全等匹配,没有类型转换