一、类型转换
说明:任何的语言中都有一条规则。
不同种类的数据不能一起进行数据运算。
如果需要不同类型之间的数据进行混合运算,那么需要将不同类型的数据转换为同类型的数据之后才能进行运算。 所谓的类型转换。
类型转换分为两种:
1、显式类型转换 | 强制类型转换(程序员通过js代码进行类型转换)
2、隐式类型转换(对于程序员是透明的,不需要参与)。
二、Number()显式类型转换
显式类型转换:转换为Number类型。
通过Number() 函数进行显式转换。

<script>//String-->Numberconsole.log (Number("123"));//123console.log (Number("123a"));//NaNconsole.log ( parseInt("123a"));//123console.log (Number("  123"));//123console.log (Number("  \t\r123\n  "));//123console.log (Number("abc"));//NaNconsole.log (Number(""));//0console.log (Number("true"));//NaN//Boolean-->Numberconsole.log (Number(true));//1console.log (Number(false));//0//Nullconsole.log (Number(null));//0//Undefinedconsole.log (Number(undefined));//NaN//Arrayconsole.log (Number([1]));//1console.log (Number([1,2]));//NaN//Objectconsole.log (Number({"0":1}));//NaN//Functionconsole.log (Number(function () {}));//NaN
</script>

三、使用Boolean() 转换
使用Boolean() 函数。进行类型转换。
在5 种情况下会转换为false,其他的都是true。

<script>console.log (Boolean(+0));//falseconsole.log (Boolean(-0));//falseconsole.log (Boolean(""));//falseconsole.log (Boolean(null));//falseconsole.log (Boolean(undefined));//falseconsole.log (Boolean(NaN));//falseconsole.log (Boolean(false));//falseconsole.log (Boolean(-1));//trueconsole.log (Boolean(-Infinity));//trueconsole.log (Boolean("false"));//trueconsole.log (Boolean({}));//trueconsole.log (Boolean([]));//trueconsole.log (Boolean(function () {}));//true
</script>

四、使用String()进行转换
将任意类型转换为字符串
通过函数String (数据)

<script>console.log (String(true));//trueconsole.log (String(0));//0console.log (String(NaN));//NaNconsole.log (String(Infinity));//Infinityconsole.log (String(null));//nullconsole.log (String(undefined));//undefined///console.log (String([1,2]));//1,2console.log (String({}));//[object Object]var obj = {};console.log (obj.toString());//[object Object]/console.log (String({name:"小刚"}));//[object Object]console.log (String(function () {console.log (1);}));// function () {//     console.log (1);// }
</script>

五、隐式转换为Number类型
隐式类型转换是需要触发条件的。
当当前的环境需要将操作数当做数值型的数据进行计算的时候,
那么就会将其他的类型隐式转换为Mumber类型之后再做运算。
隐式的转换底层使用Number()函数转换。
隐式转换的环境:通常是四则运算

<script>console.log (true * 10);//10console.log ("123" - 1);//122console.log (false + 1);//1console.log (undefined * 1);//NaNconsole.log ("abc" / 2);//NaN
</script>

六、隐式转换Boolean类型
当环境需要一个布尔类型的数据的时候,如果当前数据不是布尔类型,
那么就会进行隐式转换,转换的规则通过显式转换。
只有5种情况下是false,其他的都是true
5种:0、null、undefined、"",NaN
需要布尔值的环境:if、三目、循环条件等等

<script>var ran = ~~(Math.random () * 10);console.log (ran);//触发隐式转换。ran % 2   0:false   1:truevar result = ran % 2 ? "奇数" : "偶数";console.log (result);//触发隐式转换。"abc"/10==NaN 会转换为 falseconsole.log ("abc"/10 ? "true":"false");
</script>

七、隐式转换String类型
任意类型,当和String进行+连接的时候,其他的任意类型都会被底层
隐式转换为String,然后再做+连接。
隐式转换的规则同显式转换。
触发的环境:+连接操作。

<script>console.log ("a" + 1);//a1console.log (true + 1 + "a");//2aconsole.log (null + "a");//nullaconsole.log (undefined + "a");//undefinedaconsole.log (NaN + "a");//NaNaconsole.log (1 + 2 + "3");//33console.log ("3" + 2 + 1);//321console.log ([1,2]+"3");//1,23console.log ({}+"a");//[object Object]a
</script>

八、对于非数值型数据大小的比较介绍
在js中,可以对任意类型使用关系运算符:> >= < <=
进行大小的比较。

对于非数值型的数据的大小的比较的规则:
1:如果是字符串之间的比较。逐个比较对应位置上的字符的Uncode码值。一旦一方的字符大于或者小于了另外一方,就作为整个比较的结果,不在继续比较后续的字符。2:如果,参与比较的数据中有非字符串型数据,那么就将所有的数据隐式转换为Number类型,再作比较。
<script>console.log ("a" > "1");//trueconsole.log ("A" > "a");//falseconsole.log ("aaa" > "aa");//trueconsole.log ("abc" > "abbbbb");//trueconsole.log ("-------------")console.log ("a" > 1);//falseconsole.log (true > 1);//falseconsole.log (null >= "0");//trueconsole.log (undefined <= false);//falseconsole.log ("  123" > NaN);//falseconsole.log (NaN >= NaN);//falseconsole.log (null >= undefined);//false</script>

九、==和 ===介绍
== : 关系运算符 等于。用于比较两个操作数是否相等的。相等为true,否则为false。
!=: 不等于。
=:绝对等于。用于比较两个操作数是否相等的。相等为true,否则为false。
!:绝对不等于。

===:绝对等于:比较的规则:先比较两个操作数的类型,如果类型不同,直接返回false。如果类型相同,然后再比较内容,内容不同,返回false。内容相同返回true。

!==:绝对不等于
比较的规则:类型或者是内容不同,结果就是true。类型和内容都相同就是false。

== : 关系运算符
比较规则:
1:如果类型相同,那么就比较值,值相同返回true,值不同返回false。
2:如果类型不同,那么就隐式转换为Number。然后再比较值。相同返回true,值不同返回false。
!=: 不等于:
比较规则:
== 返回true的,它返回false。 == 返回false的,它返回true

注意:null 和 undefined 进行 == 比较的时候,不进行类型转换。优先使用绝对等于。
<script>console.log ("1" === 1);//falseconsole.log (true === 1);//falseconsole.log (true === true);//trueconsole.log (1 === 1);//trueconsole.log ("-------------");console.log ("1" == 1);//trueconsole.log (true == 1);//trueconsole.log (null == 0);//false  ???console.log (null == undefined);//true ???console.log (false == 0);//trueconsole.log ("true" == true);//falseconsole.log (Number("true"));//NaNconsole.log ("  123" == 123);//true</script>

十、js中的流程控制语句介绍
流程控制:控制代码执行的过程。

在任何的语言中,流程控制部分分为三类:
1:顺序执行。 从上到下依次执行。
2:分支选择:根据条件,有选择的执行某些代码,跳过某些代码。if:单分支if-else:双分支if-else if....else:多分支switch:多分支
3:循环:反复执行某些代码。whiledo-whilefor

十一、if单分支
if单分支选择语句
1:语法: if(条件){ //任意的js代码 if代码块 }
2:解释:
if是js的关键字。
小括号必须要有
条件:要求是一个boolean表达式。返回值为boolean。如果条件返回的不是boolean值,那么
js底层会进行隐式的类型转换,转换为boolean值。
一对大括号:里面是任意行的js代码。
3:执行过程:
1:首先判断if后的条件的返回值。
2:如果返回值为true,那么就执行if 代码块。 然后执行后续的内容。
3:如果返回为false,那么就跳过if代码块,执行后续的内容。

注意:1:if是一个单分支选择语句,被选择执行的语句,根据条件是否成立,选择执行或者不执行。2: 如果if代码块中只有一条js代码。可以省略大括号。如果是多条js代码,那么必须使用大括号包裹。3:if后的条件的小括号后,不能添加 ;  .如果添加了分号,那么条件控制的是否执行的代码就是分号。而不是后面的大括号中的内容了。
<script>//随机得到两个数,将比较大的求得,并打印。使用if实现。const MIN = 10;const MAX = 20;var num1 = ~~(Math.random () * (MAX - MIN) + MIN);var num2 = ~~(Math.random () * (MAX - MIN) + MIN);var num3 = ~~(Math.random () * (MAX - MIN) + MIN);console.log ("num1 = " + num1 + "\tnum2 = " + num2 + "\tnum3 = " + num3);/*var max = num1;if (max < num2) {max = num2;}if(num3 > max){max = num3;}*/var max;if(num1 >= num2 && num1 >= num3){max = num1;}if(num2 >= num1 && num2 >= num3){max = num2;}if(num3 >= num2 && num3 >= num1){max = num3;}//等价于上面的写法if(num3 >= num2){if(num3 >= num1){max = num3;}}console.log ("max = " + max);
</script>

十二、if-else双分支选择
if-else双分支选择
语法:if(条件){ //if 代码块 }else{ //else代码块 }
解释:
条件:和if中的条件一致。
else:是js中的一个关键字。否则的意思。
else后的大括号:里面是任意的js代码。
执行过程:
1:先计算条件。必须返回一个布尔值,可能存在隐式的转换。
2:如果条件返回的结果为true,那么就执行if代码块。而不执行else代码块。
3:如果返回的结果为false,那么就跳过if代码块,执行else代码块中的内容。

 注意:1:if可以单独使用。else 不能单独存在,必须和某一个if 配对使用。2:if 代码块和else代码块中的内容,如果只有一行js代码,可以省略大括号。3:不要在条件小括号后添加分号,else就没有配对的if了。报错了。4: if 和 else之间,要么是一条js代码,要么是一个if代码块。5:if-else 双分支。这两个分支是条件互斥的。两个分支执行且必须执行其中的一个分支。
<script>//练习:两个英雄pk,一人攻击一次。//一个叫阿基里斯,一个叫赫克托var aHp = 100;var aAtk = 100;var hHp = 100;var hAtk = 100;//赫克托攻击阿基里斯var damage = hAtk + ~~(Math.random () * (11) - 5);//【-5 +5】aHp -= damage;if (aHp <= 0) {//阿基里斯挂了aHp = 0;console.log ("赫克托攻击了阿基里斯,产生了伤害:" + damage);console.log ("阿基里斯挂了!");} else {//阿基里斯残血反击damage = aAtk + ~~(Math.random () * (11) - 5);//【-5 +5】hHp -= damage;if (hHp <= 0) {hHp = 0;console.log ("阿基里斯残血反杀了赫克托。");console.log ("赫克托挂了");}}//结果:if (aHp === 0) {//阿基里斯的血量为0console.log ("赫克托胜利了!");} else {阿基里斯的血量不为0,还活着if (hHp === 0) {//赫克托血量为0console.log ("阿基里斯胜利了!");} else {console.log ("aHp = " + aHp + "\thHp = " + hHp);console.log ("平局!");}}
</script>

十三、if-else if-else多分支 选择
if-else if…else 多分支选择语句
语法:
if(条件-1){ //代码块-1}
else if(条件-2){ //代码块-2}
else if(条件-3){ //代码块-3}

else{代码块-n}
执行过程:
1:先判断 条件-1,如果成立,执行 代码块-1。后续的所有的分支都被跳过。
2:条件-1 不成立。继续判断 条件-2.成立执行对应的代码块,不成立,继续判断后续的条件。
3:一次类推,只要有一个条件成立了,就执行对应的代码块,其他的代码块都被跳过。
4:如果所有的条件都不成立,那么执行最后的else 的代码块。

 注意:1:如果代码块中的内容为一条js代码,大括号可以省略。2:这些所有的分支的条件理论上应该是互斥的。不应该存在重叠的条件。3:每个else 都和它前面的距离它最近的if 配对。4:if-else 多分支,执行且仅能执行其中的一个分支。5:最后的else可以不写。取决于业务的要求。如果最后的else没有,那么这么多的分支可能一个都不执行。如果前面的所有的条件都不成立,那么就都不执行。
<script>/*练习 随机 得到一个分数[0,100],* [90-100]:打印 优秀* [80-89]:良好* [70-79]:中等* [60-69]:及格* [0-59]:回炉重造。* */const MIN_SCORE = 0;const MAX_SCORE = 101;var score = ~~(Math.random () * (MAX_SCORE - MIN_SCORE) + MIN_SCORE);console.log (`score = ${score}`);if (score >= 90) {console.log ("优秀");} else if (score >= 80) {console.log ("良好");}else if(score >= 70){console.log ("中等");}else if(score >= 60){console.log ("及格");}else{console.log ("回炉重造");}</script>

十四、switch-case多分支选择
switch-case 多分支选择:
语法:
switch(变量表达式){
case 常量表达式-1:
代码块-1
break;
case 常量表达式-2:
代码块-2
break;
case 常量表达式-3:
代码块-3
break;

default:
代码块-n
break;
}
解释:
switch:js关键字,开关的意思。
小括号中的变量表达式:包含变量的表达式。
后面是一对大括号。大括号中有若干对 case-break 结构体。
case 后通常是常量表达式:
代码块:任意行js代码分支语句。
break:js关键字。后面直接跟分号即可。

执行过程:1:首先计算 switch后的变量表达式的结果。2:然后从上到下依次计算每个case 后的常量表达式计算的结果。然后依次和switch变量表达式计算的结果进行等值比较。比较是否相等。如果和某一个case 后的值相等,那么就执行对应的代码块的内容。如果不相等,就继续比对下一个case 后的值。3:如果某一个case 相等了,那么就执行里面的内容,遇到break,直接结束整个switch语句。4:如果和每个case后的值都不相等,那么就执行default后的代码块。注意:1:每个case后的常量表达式的值应该是不同的。2:多少个case 取决于业务的要求,没有数量的限制。3:每个case 后的break,都是可以没有的。取决于业务的需求。如果执行了case后需要结束switch,那就需要添加break。4:default:是可选择添加的。根据业务要求。5: 该机构只且最多比对相等一次。break:在switch语句中的作用就是用来结束switch语句的。如果执行了case后的代码,但是case后没有break,那么后面的所有的case都将被继续执行。直到遇到了一个break,才会结束switch。
<script>/*练习 随机 得到一个分数[0,100],* [90-100]:打印 优秀* [80-89]:良好* [70-79]:中等* [60-69]:及格* [0-59]:回炉重造。* */const MIN_SCORE = 0;const MAX_SCORE = 101;var score = ~~(Math.random () * (MAX_SCORE - MIN_SCORE) + MIN_SCORE);console.log (`score = ${score}`);score /= 10;score = ~~(score);console.log (`score = ${score}`);//[0-10]switch (score) {case 10: case 9:console.log ("优秀");break;case 8:console.log ("良好");break;case 7:console.log ("中等");break;case 6:console.log ("及格");break;case 5:case 4:case 3:case 2:case 1:case 0:console.log ("回炉重造");break;//等价代码// default://     console.log ("回炉重造");//     break;}
</script>

十五、多分支选择语句的使用选择
1:if-esle多分支:
既可以进行等值比较,也可以进行不等值的区间的比较。
2:switch case :只能进行等值比较。
switch case 能实现的,if-else一定可以实现。

十六、 switch-case练习
模拟一次人和电脑之间的游戏:猜丁壳。
石头剪刀布。
要求:
玩家:通过键盘输入选择石头、剪刀、布
电脑:随机获得。
打印玩家和电脑的手势。
然后比较玩家和电脑的手势。
最后打印结果,谁胜利了。

<script>//定义三个常量,代表石头剪刀布const STONE = 0;const SCISSORS = 1;const PAPER = 2;//定义变量,接收用户的输入。var playerInput = parseInt (prompt ("请输入【0:石头】【1:剪刀】【2:布】"));//定义变量保存电脑的随机。var computerInput = ~~(Math.random () * (PAPER + 1 - STONE) + STONE);//根据用户输入的值,和电脑随机的值。打印两者的手势的内容。//玩家的var logStr = "玩家选择了";switch (playerInput) {case STONE:logStr += "【石头】";break;case SCISSORS:logStr += "【剪刀】";break;case PAPER:logStr += "【布】";break;}console.log (logStr);//电脑的logStr = "电脑选择了";switch (computerInput) {case STONE:logStr += "【石头】";break;case SCISSORS:logStr += "【剪刀】";break;case PAPER:logStr += "【布】";break;}console.log (logStr);//根据用户输入的值,和电脑随机的值 比较。谁胜利了!打印最终的结果。switch (playerInput) {//玩家的三种情况,case STONE:switch (computerInput) {case STONE:console.log ("平局");break;case SCISSORS:console.log ("玩家胜利了");break;case PAPER:console.log ("电脑胜利了");break;}break;case SCISSORS:switch (computerInput) {case STONE:console.log ("电脑胜利了");break;case SCISSORS:console.log ("平局");break;case PAPER:console.log ("玩家胜利了");break;}break;case PAPER:switch (computerInput) {case STONE:console.log ("玩家胜利了");break;case SCISSORS:console.log ("电脑胜利了");break;case PAPER:console.log ("平局");break;}break;}</script>

十七、while循环

循环:loop
当需要反复的,重复的执行某些代码的时候,就需要使用循环了。
while、do-while、forwhile 循环
语法:while(循环条件){ //循环体 }
解释:while:关键字循环条件:布尔表达式,返回一个布尔值。如果不能返回一个布尔值,那么就需要隐式转换。大括号中是需要反复执行的代码块。执行过程:1:先判断循环条件,如果是true,那么就执行循环体。然后执行完循环体,再继续判断循环条件成立,继续执行循环体,直到循环条件为false,那么立即结束循环。2:如果一开始循环条件就是false,那么循环体一次都不执行。注意:1:如果循环体就一句代码,那么可以省略大括号。2: 千万不要在循环条件后添加 ; 号。如果加了,循环体就是分号了。循环结构的构成:1:循环控制部分a:循环条件初始化b:循环条件c:迭代(改变循环条件部分)2:循环体
<script>//打印100个 helloworld。/*var counter = 0;while(counter < 500){console.log ("helloworld!");counter ++;}counter = 0;while(counter++ < 500)console.log ("helloworld!");*///1-100的累加和var sum = 0;//累加和变量var num = 0;//自变量 1--100while (num < 100) {num++;sum += num;}console.log ("sum = " + sum);//1--100的奇数的累加和sum = 0;num = 1;while (num < 100) {sum += num;num += 2;}console.log ("sum = " + sum);sum = 0;num = 1;while (num < 100) {if (num % 2 != 0)sum += num;num++;}console.log ("sum = " + sum);</script>

003day 隐式类型的转换及多分支结构的选择相关推荐

  1. c# 无法将类型隐式转换_C#中的隐式类型数组

    c# 无法将类型隐式转换 C#隐式类型数组 (C# Implicitly Typed Arrays) Like implicitly typed variables, we can also decl ...

  2. 类型转换:隐式转化(算数转换,整型提升,混合提升,赋值转换),强制转换【C语言】

    类型转换 隐式转化 算数转换 整型提升 混合提升 赋值转换 强制转换 编译器使用注意 小结 类型转换 隐式转化 不需要人为参与而产生的默认转称为隐式转化. 隐式转化,是计算机语言实现层面最难的,指针是 ...

  3. 《MySQL tips:隐式类型转换与隐式字符编码转换对查询效率的影响》

    维护一个交易系统,交易记录表tradelog包含交易流水号(tradeid).交易员id(operator).交易时间(t_modified)等字段. create table 'tradelog' ...

  4. 隐式类型转换与转换操作符operator T

    隐式类型转换与转换操作符 operator T C++ 标准允许隐式类型转换,即对特定的类,在特定条件下,某些参数或变量将隐形转换成类对象 ( 创建临时对象 ) .如果这种转换代价很大 ( 调用类的构 ...

  5. C#隐式类型和显示类型

    一,在程序中我们经常会遇到:无法将类型"XXX"隐式装换为"XXX",如下例子: static void Main(string[] args){int i;i ...

  6. 委托 匿名类 var隐式类型 匿名方法

    委托 委托是一个类  它定义了方法的类型  实现了讲一个方法当做另一个方法的参数来传递 (委托的一个有趣且有用的属性是,他不知道也不关心所引用的方法的类 只关心引用的方法是否具有与委托相同的参数和返回 ...

  7. Linq之隐式类型、自动属性、初始化器、匿名类

    目录 写在前面 系列文章 隐式类型 自动属性 初始化器 匿名类 总结 写在前面 上篇文章是本系列的小插曲,也是在项目中遇到,觉得有必要总结一下,就顺手写在了博客中,也希望能帮到一些朋友.本文将继续介绍 ...

  8. 【C#】隐式类型var

    在.NET 3.0后微软引入了隐式类型var,编译器可以自动判断变量的类型,通过var这个隐式类型,可以提高开发人员的开发效率,很多时候可以不考虑对象的类型,编译器会自动帮我们判断 使用隐式类型和使用 ...

  9. Linq原理相关(隐式类型var、匿名类型、实例化类、集合初始化)

    1. var(隐式类型) 例如: var temp ="abc";  //正确, var temp; temp = "abc"      //错误 原因:隐式类 ...

  10. 运算符-12-多学一招原码反码补码,隐式和强制转换,位运算

    下面来解释这些东西是怎么来的 原码 例如: 最左边的叫做符号位,0 为正,1 为负,后面的才是具体的数值 在计算机中,一个 0 或者 1 所占的空间叫 bit 中文名叫比特位,八个 bit 就称为一个 ...

最新文章

  1. Redis主从配置及通过Keepalived实现Redis自动切换高可用
  2. Docker selenium自动化 - 使用python操作docker,python运行、启用、停用和查询容器实例演示
  3. 送你一朵小红花观后感
  4. C指针原理(7)-C内嵌汇编
  5. Boost:bind绑定和数据成员的测试程序
  6. CodeForces - 1284C New Year and Permutation(组合数学+思维)
  7. 公众号滑动图代码_如何实现微信公众号文章“滑动查看更多”
  8. 详解python中的yield(生成器)
  9. TensorFlow 辨异 —— tf.placeholder 与 tf.Variable
  10. win10无线投屏_Win10电脑屏幕分割成四分屏投屏测试
  11. Spectacle源码及分析1 —— 源码概览
  12. 美国的学位制度以及各学位的英文简写
  13. 【5G】5G通信网络中资源分配和负载均衡算法的matlab仿真
  14. 5阶魔方阵c语言程序设计,五阶魔方阵源代码c语言时课程设计.docx
  15. 摄像头识别黑烟加框处理(测试)
  16. 计算机实训报告思路,计算机实训报告优秀范文
  17. 盖世汽车 2021中国汽车智能座舱与用户体验大会视频
  18. C文件访问 introduce
  19. Win软件 - 无法卸载 Windows 版 iCloud,因为您当前已登录到 Windows 版 iCloud 之解决方案
  20. SQL Server 系统时间

热门文章

  1. 三、I.MX6 SPI驱动(控制器驱动、设备驱动)
  2. Android微信登录、分享、支付
  3. 时间序列 | 从开始到结束日期自增扩充数据
  4. autoNUMA学习记录-20230302
  5. oracle 恢复表语句
  6. 都2021年了,学了python还是找不到工作,这真不是笑话
  7. 【Linux命令每日一知】firewall-cmd--防火墙管理
  8. c语言事业单位考试试题,2020全国事业单位考试题目综合应用C类考情分析
  9. 推荐一份完整的MySQL教学视频
  10. 如何把控css的方向感