***数据类型转换

115 阅读4分钟

unmber + unmber =unmber

unmber + string =string

js获取页面上的一切东西,默认数据都是一个字符串

typeof 查看数据类型

1、算数运算的隐式转换:悄悄的,我们程序员看不到的

默认:悄悄的把左右两边的东西,转为数字,再运算

特殊:1、+运算,碰上一个字符串,左右两边都会变成字符串,加运算也不再是加运算,变成了拼接操作

2、原来别的数据也能转成数字

true->1

false->0

undefined -> NaN:只要是数字,但是不知道转为多少的时候,结果也为NaN

null--0

3、其实+ * / %,字符串也可以转为一个数字,前提是一个纯数字组成的字符串才可以,只要包含一个不是纯数字都是转为NaN

“100"->100

"100px"->NaN

NaN:Not A Number 不是一个数字,但又确实是数字类型,不是一个有效数字

缺点:

(1)NaN参与参与任何计算,结果都为NaN

(2)NaN参与任何比较运算,结果任为false,甚至自己都不认识自己

问题:我们没有办法使用普通比较运算来判断x是不是NaN

解决:

isNaN(x)

!isNaN(1)//取反

true -- 是一个有效数字

false -- 是Nan

2、强制/显示转换

手动调用的方法,强制转换为想要的数据类型

1)转字符串

var str=xx.toString();  /不能是undefined和null,因为undefined和null不能使用.做任何操作

页面上的一切数据类型都是字符串

2)转数字(3种)

**(1)parseInt(x); parse -> 解析  Int -> 整数

原理:专门为字符串和小数转数字准备的,从左向右依次读取每个字符,之后再碰到非数字字符就会停止转换;

如果一开始就碰到不认识的字符,结果就为NaN

console.log(parseInt (100.5));//100

console.log(parseInt("100.5"));//100

console.log (parseInt("100px"));/100

console.log (parseInt("px100"));//NaN

console.1og (parseInt(" 1px00"));//1

console.1og (parseInt (true)) ;//NaN

console.log (parseInt(false)) ;//NaN

console.log (parseInt (undefined));//NaN

console.log (parseInt (null));//NaN

**(2)parseFloat(str);  parse -> 解析  Float -> 浮点数

原理:几乎和parseInt一致,认识小数点

console.log(parseFloat (100.5));// 100.5

console.log (parseFloat("100.5"));//100.5

console.log (parseFloat ("100.5px"));/100.5

console.log (parseFloat("px100.5"));//NaN

console.log (parseFloat("10px0.5"));//10

console.log (parseFloat ("100.5.5.5"));//100.5

console.log(parseFloat(".555"));//0.555

(3)Number(x); //此方法是万能的,任何数据类型都可以转换为数字

  //垃圾:完全等同于隐式转换

二、Function基础

Function:函数,也称为方法(需要预定义,以后可以反复使用的代码块)

一阶段见过的函数:

rotate(360deg) - 完成顺时针旋转360度的功能

url("图片路径") - 完成根据图片路径显示图像

如何使用:

1)创建/定义/封装函数:

function 函数名(){

若干的函数体/代码块/操作

}

2)调用/使用函数

函数名();

注意:1程序员在js里写死,调用几次就,执行几次

2、交给用户来触发,只需要给元素绑定个点击事件

内容

3、何时使用:

1、不希望打开页面立刻执行,而需要时再用,或者由用户来触发

2、希望能够反复执行,不用刷新页面

3、以后任何一个独立的功能体,都要单独封装为一个函数(你的每一个作业)

4、函数在js中的地位最高:函数是第一等公民地位,所以随时随地,咱们要想着能不能封装函数

4、带参数的函数

榨汁机 -> 函数:榨汁

原材料 -> 参数

何时使用:如果我的函数体,希望根据传入的实参的不同,做的略微不同

创建:形参:形式参数,其实就是一个变量,但是不需要写var,而且默认也没有保存任何值

function 函数名(形参,...){

若干的函数体/代码段/操作

}

调用:实参:实际参数,真正的值,需要你在调用函数时传入进去

函数名(实参);

特殊:1、传参的顺序一定要一一对应上,并且数量也要对应

2、不是一定需要带参数的函数,才是好函数,具体要不要带有参数,需要看我们的需求

如果你的函数体就是固定的 - 则普通函数搞定

如果你的函数体是根据参数的不同,做的略微不同 - 就使用带参数的函数


3、***分支结构:

1、程序的流程控制语句:3种

1、顺序执行 - 默认:从上向下依次执行

2、分支结构 - 通过条件判断,选择部分代码执行

3、循环结构 - 通过条件判断,选择要不要重复执行某块代码

2、比较运算符:>= <= > < == !=

用于做判断的

结果:一定是一个布尔值

强调:1、=:不是比较,而叫做赋值操作,把等号右边的东西保存到等号左边

2、如果你想要判断多个条件,绝对不能像小时候数学的写法:18<=age<=65,错误的!在代码里不支持

解决:逻辑运算符

3、逻辑运算符:

&&:与、并且。要求全部条件都满足,最后的结果才为true

只要有一个条件不满足,结果则为false

||:或。要求全部条件都不满足,最后的结果才为false

只要有一个条件满足,结果则为true

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

4、分支的语法:

一个条件,一件事,满足就做,不满足就不做

if(条件){

操作

}

一个条件,两件事,满足做第一件,不满足做第二件

if(条件){

操作

}else{

默认操作

}

多个条件,多件事,满足谁,就做谁

if(条件1){

操作1

}else if(条件2){

操作2

}else{

默认操作

}