JavaScript day006

70 阅读3分钟

*数据类型的转换

1、强制转换:3类

1、转字符串:
    1、x.toString();//x不能是null和undefined,不能用.做操作
    2String(x);//此方法是万能的,任何类型都可以转为字符串,完全相当于隐式转换,绝对不要手动使用此方法,还不如 +""
不重要:1、页面上的一切数据默认都是字符串类型

2、*转数字:
	1parseInt/Float(str);
	//专门为字符串转数字准备的
原理:从左向右,依次读取每个字符,碰到非数字字符则停止,如果一来就不认识,则为NaNFloat认识第一个小数点

	2Number(x);
	//此方法是万能的,任何类型都可以转为数字,完全相当于隐式转换,绝对不要手动使用此方法,还不如 -0 *1 /1 %1

3、转布尔:
	Boolean(x);//此方法是万能的,任何类型都可以转为布尔,完全相当于隐式转换,绝对不要手动使用此方法,还不如 !!x
	***大部分情况都为true,只有6个为false0,"",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<汉字

2NaN参与任何比较运算结果都为false,解决:!isNaN(x);

3undefined==null;//true;
区分: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++;//递增,每次固定只会+1
	i+=1;//累加,每次+几由我们程序员自己决定
	i=i+1;//最low的写法
       
        笔试题++i 和 i++的区别?
        单独使用,两者没有区别。
        如果参与了别的表达式,变量中的值都会+1
        前++,返回的是加了过后的新值
        后++,返回的是加了之前的旧值

<script>
        var i = 0;

        ++i;

        console.log(++i);
        console.log(i);
        //前++,返回的是加了过后的新值
        //后++,返回的是加了之前的旧值
        var me = 0;//7
        var sn = me++ + ++me + me++ + ++me + me++ + me++ + ++me;
        //        0      2      2      4      4      5      7
        console.log(sn);//24
        console.log(me);//7

        var me = 2;

        var sn = ++me + me++ + me++ + ++me + ++me + me++ + me++;
        //        3 	3	  4		6      7      7      8
        console.log(sn);//38
        console.log(me);//9


        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);//d代表保留的小数位数,会四舍五入的功能
	缺陷:搭配上一个parseFloat()使用最好,返回的结果是一个字符串

2、获取字符串中第一个字符的ascii码:str.charCodeAt(0);
	数字:48-57
	大写字母:65-90
	小写字母:97-122
	汉字:199684e00)-408699fa5)