JS第二周——day1

101 阅读2分钟

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);