数据类型转换
让两个数据类型不一样的数据转换成一样的数据类型
其他类型转number(数字型)
转整型
代码:parseInt(数据)
let i =3.14
console.log(parseInt(i));//结果为3
转小数型
代码:parseFloat(数据)
let i =3.14
console.log(parseFloat(i));//结果为3.14
非字符串类型转Number
let i =3.14
console.log(Number(i));//结果为3.14
number类型的特殊数值 NaN
NaN : number类型中一个特殊值
场景: NaN表示错误的运算。 产生的原因一般是代码出bug
NaN特点: 不能参与任何运算。 结果一律是NaN
转string(字符串)
//1. String(数据)
let i = 200
console.log(String(i));
//2. 变量名.toString()
/* a. 如果是undefined与null,这种方式会报错
b. 这种方式可以支持进制转换。 例如把 十进制转十六进制
*/
console.log(i.toString());
// 转16进制
console.log(i.toString(16));
// 转8进制
console.log(i.toString(8));
转Boolean(布尔)
// Boolean(数据)
/*
1.false: 有7种数据会得到false
0 -0 null '' unedfined false NaN
2.true: 除false 7种之外的一切数据
*/
console.log(Boolean(123));//true
console.log(Boolean(0));//false
隐式转换
/*
隐式转换 : 当运算符两边的 ‘数据类型不一致’ 的时候,编译器会转成一致后运算
(1)转换数字 : 算术运算符 + - * / %
(2)转换字符串 : 连接符+ (+号两边只要有一边是字符串,此时+就是连接符)
(3)转换布尔: 逻辑非 !
*/
console.log('10' - 10);// 0
console.log('10' - '9');// 1
console.log('10' / 5);// 2
console.log(!1);//false
console.log(!0);//true
undefined与null区别
/*
1. undefined : 未定义。 当变量只声明,但是没有赋值。此时默认值是undefined
举例 : undefined相当于期房。 买了房,但是房子还没建出来。(未定义)
2. null : 有定义。 定义的值是空值。
举例 : null相当于毛坯房。买了房,但是房子没住人,里面是空的。(空值)
*/
let a
console.log(a); //unedfined
let b = null
console.log(b); //null
console.log(Boolean(a)); //false
console.log(Boolean(b)); //false
console.log(a == b); //true 值相同
console.log(a === b); //false 值相同但是数据类型不相同
console.log(Number(a)); //NaN
console.log(Number(b)); //0
console.log(a + b); //NaN
流程控制-分支结构
程序三大流程控制语句
以前我们写的代码,写几句就从上往下执行几句,这种叫顺序结构
有的时候要根据条件选择执行代码,这种就叫分支结构
某段代码被重复执行,就叫循环结构
语句与表达式
1.表达式 : 由运算符组成的式子, 一定会有运算结果 (运算)
2.语句 : 让js编译器执行某个命令,做什么事情 (执行)
分支语句 循环语句
if分支语句
1.顺序结构(默认) : 代码从上往下依次执行
2.分支结构 : 代码根据条件来执行
语法
if(条件 true/false){
满足条件需要执行的代码
}
注意点: 小括号里面的条件可以写哪些代码呢?
(1)比较表达式 : 比较表达式结果一定是布尔类型
(2)直接写布尔类型的值
(3)写其他的值 : 编译器会自动转成布尔类型来判断是否成立
if(5>2){
alert('今天在包子里吃到一只虫子')
}
if-else 多分支语句
if-else双分支
语法:
if(条件true/false){
条件成立时需要执行的代码
}else{
条件不成立时需要执行的代码
}
注意点:双分支语句是两个互斥条件(两个条件一定会满足一个,不会同时满足,也不会同时不满足)
if大括号代码 和 else大括号代码 一定会执行一个,不会同时执行,也不会同时不执行
if(5>2){
alert('今天在包子里吃到一只虫子')
}else{
alert('我骗你的')
}
if-else if-else...分支语句
if分支语句
单个条件: if单分支
两个条件: if-else双分支
多个条件: if - else if - else 多分支
语法
if(条件1){
条件1成立时需要执行的代码
}else if(条件2){
条件2成立时需要执行的代码
}else if(条件3){
条件2成立时需要执行的代码
}
.....
else{
如果前面所有条件都不满足,则执行else代码
}
注意点
(1)多分支所有的大括号代码最多只会执行一个,只有当前面的条件不满足,才会进入后面的条件判断
(2)多分支一定要以if开头,后面else if可以多个,结尾else可以省略
// 隐式转换
let i = +prompt('请输入考试分数')
console.log('我今天上学了')
console.log('我今天考试了')
console.log('我回家了')
if (i >= 90) {
console.log('买布加迪')
} else if (i >= 80) {
console.log('奖励兰博基尼')
} else if (i >= 60) {
console.log('奖励兰特斯拉')
} else {
console.log('打我一顿')
}
console.log('我回房间睡觉了')
三元表达式
1.运算符根据运算数的多少,分为一元、二元、三元运算符
一元运算符:只能运算一个数
++ -- !
二元运算符:能运算两个数
算术、比较
三元运算符: 能运算三个数
?:
2.三元表达式: 表达式 ? 代码1 : 代码2
执行规则: 如果表达式为true,则执行代码1,否则执行代码2
3.三元表达式功能和if-else语句类似
3.1 如果你的代码只有1行,则可以用三元
3.2 三元表达式有运算结果
switch-case分支结构
switch-case分支结构
语法:
switch(匹配值){
case 值1 :
值1 === 匹配值,需要执行的代码
break
case 值2 :
值2 === 匹配值,需要执行的代码
break
......
default :
匹配值与上面所有case的值不匹配(全等),需要执行的代码
break
}
注意点
(1)匹配值和case值 一定要是 ‘全等’关系
(2)不能省略break关键字,break关键字作用是结束switch语句
如果省略则会发生传统现象: 代码从上一个case无条件执行到下一个case
switch-case穿透
如果在case 值:下没有加break那么此时就会发生穿透
程序会一直往下运行其他的case 值:直到结束
穿透有何用
/*
春 : 3 4 5
夏 : 6 7 8
秋 : 9 10 11
冬 : 12 1 2
*/
let season = +prompt('请输入月份')
switch (season) {
case 3:
case 4:
case 5:
alert('春季')
break
case 6:
case 7:
case 8:
alert('夏季')
break
case 9:
case 10:
case 11:
alert('秋季')
break
case 12:
case 1:
case 2:
alert('冬季')
break
default:
alert('请输入正确的月份')
}
while循环
循环结构:代码重复执行
while循环语法
while( 条件 true/false ){
循环体:需要重复执行的代码
}
// 打印10次 你好吗?
let i = 0
while (i < 10) {
console.log('你好吗?');
i++
}
for循环(使用很多)
for循环: 1.声明循环变量 2.循环条件 3.循环变量自增 写在一个小括号中,代码更加简洁易读
语法:
for(语句1;语句2;语句3){
循环体:需要重复执行的代码
}
// 打印10次 你好吗 ?
for (let i = 0; i < 10; i++) {
console.log('你好吗?');
}
break与continue
continue : 结束当前循环进入下一次循环
break:遇到break立即结束整个循环;
break有就近远着,若循环嵌套着循环那么break只能结束最近的一个循环
循环与循环之间可以嵌套使用,也可以嵌套其他代码
玩循环需小心谨慎哦
while (true) {
let i = confirm('我爱你,嫁给我好吗?')
if (i) {
alert('我们结婚吧')
break
}
}