一、补充
1.js中的三大特殊数据:undefined,null,NaN
NaN
:非法的数值运算得到的结果- 特殊之处:
- 是一个数值型的数据,但是不是一个数字
- NaN不等于任何值,和任何数据都不相等,NaN不等于NaN
- 检测方法:
isNaN(要检测的数据)
- true:检测结果为 NaN 或能转成 NaN
- false:检测结果不是 NaN 或不能转成 NaN
- 特殊之处:
undefined
是:未赋值,类型是undefined;null
是:空,类型是object- 特殊1:undefined和null在关系运算符两边隐式类型转换后,得到了一致的数据
- 特殊2:undefined被Number转成NaN,null被Number转成0
- 如何判断三大特殊的值,分别是谁?
NaN
可以使用isNaN()
来判断- isNaN(要判断的值或变量);
var a = NaN; console.log(isNaN(a)); // 结果是布尔值:true为是的,false为不是
undefined
可以使用typeof
判断- typeof 要判断的值或变量
var b = undefined; console.log( (typeof b) === "undefined" );// 结果是布尔值:true为是的,false为不是
null
需要配合typeof
和关系运算符判断- typeof 要判断的值或变量 === “object”
var c = null; console.log( (typeof c) === "object" );
- 还需要( && )
- 要判断的值或变量 == null
console.log(c === null);
- js中三大特殊的值,特殊之处,远远不止这么一点,还需要配合更多的课程发现总结…
二、逻辑分支(选择结构,分支结构)
- 其实今天的课程才算开始涉及到逻辑
- 程序的三大结构
- 顺序结构 - 每天
- 代码逐行执行,一行一行自上而下执行
- 分支结构
- 有选择了,十字路口的选择,只能选择一个,如果…否则…
- 循环结构 - 后话
- 重复,重复执行多次,起因:无聊,然后开始:吃,胖,心情不好,吃,胖…
-
什么是分支结构
-
听懂的扣1:看到了1,继续讲课
-
不懂的扣2:看到了2,重新讲一遍
-
此时,在我让大家扣1或2之前,我知道你们会扣什么吗?不知道,但是我是不是得准备好继续讲或重新讲,然后根据你们的回答,决定我选择哪个讲法
-
今晚干啥?取决于:你有没有对象?
- 有:面向对象编程
- 没有:自己编程…
-
-
分支语句
-
分支和循环结构,需要配合一些专用代码才能实现,专用代码叫:语句
-
if
:单分支if(条件){执行语句}
-
if else
:双分支if(条件){条件为true时,要执行的语句}else{条件为false时,要执行的语句}
- 分支的嵌套(双分支模拟的多分支)
- 在执行体内,可以继续写其他分支
if(条件1){}else if(条件2){}else if(条件3){}else......
-
if的小括号里面也会发生隐式类型转换规则
- 规则:其他转布尔
- 数值转布尔:非0为true,0为false
- 字符转布尔:非空字符,为true,空字符,为false
- 对象转布尔:对象为true
- 数组转布尔:数组为true
- 函数转布尔:函数为true
- 特殊数据转布尔:undefined,NaN,null都为false
- 规则:其他转布尔
-
switch
:多分支- 语法:
var n = 2; var msg = ""; switch(Number(n)){ case 0: msg = "星期日"; break; case 1: msg = "星期一"; break; ... default: msg = "你输入的数字不对,请输入0~6之间的数字"; } console.log(msg);
- 规则:
-
当要判断的值是固定的数据时,选择使用switch
- 如果要判断的值是范围时,选择使用if-else
-
switch的case判断,不存在隐式类型转换
- 某些情况下,需要根据场景,选择是否需要主动转换
-
如果你不管上面的使用建议,非要使用switch判断范围,注定要多掉点头发
- 使用switch判断范围
var cj = 45; switch( true ){ case cj<60: console.log("不及格"); break; case cj>=60 && cj<70: console.log("及格"); break; default: console.log("以上case都没执行"); }
-
- 语法: