数据类型转换***

122 阅读5分钟

***数据类型转换: javascript是弱类型语言,数据类型都是由数据来决定的

对于不同数据类型的运算时,数据类型会进行转换:
	number + number = number
	number + string = string

如果你喜欢查看数据类型:typeof(需要检查的人);

1、算术运算隐式转换:其他运算也有
	自动转换,悄悄的,我们程序猿是看不见的
	其实只要是算术运算就一定带有隐式转换,默认会将左右两边转为数字,再运算
	特殊:1、+运算,如果碰到了一个字符串,那么左右两边都会悄悄转为字符串,再拼接
	      2、-*/%,就算是字符串也可以转为数字,但是不需要是纯数字组成的才可以,只要包含了非数字字符,则为NaN
	      3、某得人转为数字的结果
			true->1
			false->0
			undefined->NaN
			null->0
			"100"->100
			"10a0"->NaN
	      4NaNNot a Number,不是一个数字,但是确实是数字类型,理解为是一个无效的数字
			缺点:1NaN参与任何算术运算结果仍为NaN
			      2NaN参与比较运算结果都为false
				 问题:我们没有办法使用普通的比较运算来判断x是不是NaN
				 解决:个人更爱反用:
					!isNaN(x) - 判断x是不是一个有效数字
					true->说明是一个有效数字
					false->说明是一个NaN

2、强制/显式转换:
   隐式转换的结果可能不是我们想要的,我们程序员可以手动调用某些方法,进行数据类型的转换后,再运算
   1、转为字符串:
	语法:var str=x.toString();//x不能是undefined和null,因为undefined和null不能使用.操作
	此方法不重要,页面上获取来的所有的数据默认都是字符串

   2、*转数字:3个方法
	*1var num=parseInt(str/num);  parse->解析 Int->整型/整数
	   原理:从左向右依次读取每个字符,进行转换,碰到非数字字符就停止,而且不认识小数点,如果一开始就碰到了不认识的字符,结果为NaN
		console.log(parseInt(35.5));//35
		console.log(parseInt("35.5"));//35
		console.log(parseInt("35hello5"));//35
		console.log(parseInt("hello35"));//NaN
		console.log(parseInt("35px")+100+"px");//35
		console.log(parseInt("35px555abc"));//35
		console.log(parseInt(布尔、undefinednull));//NaN

	*2var num=parseFloat(str);  parse->解析 Float->浮点数/小数
	   原理:几乎和parseInt一模一样,认识小数点
		console.log(parseFloat("35.5"));//35.5
		console.log(parseFloat("35.5px"));//35.5
		console.log(parseFloat("35.5.5"));//35.5 - 数字只有一个小数点,第二小数点就是不认识的字符
		console.log(parseFloat(".55"));//0.55
		console.log(parseFloat("px35.5px"));//NaN
		console.log(parseFloat(true));//NaN

		以上两个都可以去掉字符串的单位

	3Number(x);//x是万能的,任何人都可以转为数字
		     //垃圾,因为此方法完全就是隐式转换,也不能转带有非数字字符的字符串,还不如对着x *1 /1 -0,绝对不要手动使用

	总结:1、只要页面上带有单位的数字,我们都可以用parseXXX来去掉单位变为数字
	      2Number何时都不用

2、*****函数:函数是第一等公民的地位 url(图片路径) - 完成了一个根据图像路径显示图片的功能 rotate(角度值) - 完成一个根据角度值旋转的功能 ... js里面的函数 - 完成了一个xxxxxxxxxxx的功能

1、什么是函数:也称为方法,需要【预定义】(提前创建好)后,可以【反复使用】的【代码段】(里面可以放若干代码)
	
2、创建函数并且调用函数
	第一步:
	创建:function 函数名(){
			若干代码段
	      }
	

	第二步:
	调用:2种方式
	1、直接在js里面写 函数名(); 程序员写几次就会执行几次

	2、绑定在页面的元素上,让用户来触发,用户触发一次就会执行一次 - 提升用户体验感/多了交互感
		<elem onclick="函数名();"></elem>

3、以后何时要使用函数呢?
	1、打开页面不希望立刻执行
	2、希望用户/程序员来触发
	3、希望能够被反复执行
	4、本身就是一段独立的功能体:暂时理解为我们的每一个作业就是一个独立的功能体
	5、以后要尽量的将每个功能封装为一个函数,函数是第一等公民的地位,而且函数中的变量会自动释放

4、带有参数的函数
	电饭煲 -> function函数
	功能:把什么东西煮熟
	原材料 -> 参数:米饭、蹄花、脑花

	1、创建带参数的函数:
		形参:就是一个变量名,只不过这里的变量名不需要var,并没有保存真正的值,形式参数,简称形参
		function 函数名(形参,...){
			函数体;
		}

	2、调用带参数的函数:
		实参:实际参数,这个变量名所保存的值
		函数名(实参,...)

	一个函数可以执行相似的操作

	比如:实现任意两个数相加:
		function add(a,b){
			console.log(a+b);
		}
		add(1,2);
		add(3,4);
		add(5,6);
	注意:带参数的函数,在调用时,传入的实参的顺序和个数都要一一的和形参对应上

	总结:
	  1、如果你的函数体是固定不变的,则不需要使用带参数的函数
	  2、如果你的函数体希望根据传入的实参的不同,做的事儿也略微不同,需要使用带参数的函数

3、***分支结构 1、代码中流程控制语句:3种 1、顺序结构: 默认结构,代码从上向下一步一步执行的

2、分支/选择结构:
   根据条件,选择一部分代码去执行

3、循环结构:
   根据条件,判断你是否需要再一次重复的执行某一些代码

2、比较运算符:> < >= <= == != 作用:比较判断/条件中出现 结果:以上六个运算符,结果一定是一个布尔值 其实比较运算符也具有隐式转换,但是我不给你说,大部分情况下依然会转为数字在比较大小

3、if结构: 1、一个条件一件事,满足就做不满足就不做 if(条件){ 操作 }

2、一个条件2件事,满足就做1不满足2
	if(条件){
		1
	}else{
		2
	}

3、多个条件多件事,满足谁就做谁
	if(条件1){
		1
	}else if(条件2){
		2
	}else{
		3
	}

扩展:逻辑运算符:&&(与、并且) ||或 !非 &&:只有全部条件都满足,最后结果才为true 只要有一个条件为false,结果就为false

||:只有全部条件都不满足,最后结果才为false
    只要有一个条件为true,结果就为true

 !:颠倒布尔值
	!true -> false
	!false -> true
	!!!true -> false