Skip to content

很多时候我们有这样一个需求,就是当满足某些条件的时候,我再执行这条语句,这是一个很常见的需求,在 JS 中使用 if 语句来实现这个功能。

js
if(表达式){
	//语句
}

以上为 if 语句的基本语法,使用 if 语句,JS 会对括号内的表达式进行布尔判定,只有当布尔判定为真的情况下,才会执行大括号里面的代码,我们看一个 demo

js
if(grade == 100){
	console.log("考了满分");
}

当成绩为 100 的时候,输出考了满分。

有时候我们需要当条件满足的时候执行一串代码,条件不满足的时候执行另一些代码,这种情况下我们就可以使用以下写法

js
if(表达式){
	//表达式为真,执行这里
}else{
	//否则执行这里
}

我们现在就有可以实现这样的效果

js
if(grade>=60){
	console.log("成绩合格");
}else{
	console.log("成绩不合格");
}

我们有时候可能还需要多个条件进行判断,比如成绩 90 到 100 是优秀,80 到 90 是良好,70 到 80 是中等,60 到 70 是及格,小于 60 是不及格,我们当然可以用前面的写法来,像下面这样

js
if(grade >= 90){
	console.log("优秀");
}
if(grade >= 80 && grade < 90){
	console.log("良好");
}
if(grade >= 70 && grade < 80){
	console.log("中等");
}
if(grade >= 60 && grade < 70){
	console.log("及格");
}
if(grade < 60){
	console.log("不及格");
}

这样当然可以实现,但是这样是不是太麻烦了,我们其实有更好的写法

js
if(grade >= 90){
	console.log("优秀");
}else if(grade >= 80){
	console.log("良好");
}else if(grade >= 70){
	console.log("中等");
}else if(grade >= 60){
	console.log("及格");
}else{
	console.log("不及格");
}

这个其实非常好理解,当成绩大于等于 90 的时候输出优秀,如果没有满足这个条件,就会继续往下看,如果成绩大于等于 80,输出良好。就这样一个接一个。不过请注意,这里这么多输出语句,最终只有一个会执行,例如成绩为 82,那么判断第一个,发现不大于 90,就继续判断第二个,发现大于 80,此时输出一个良好,后面的判断什么的都不会再被执行。

我们可以认为这就是一个选择器,如果满足其中的某一个条件,就执行代码块,只有在都不满足前面所有条件的情况下,才执行 else 里面的代码。

读者可能以后会遇到省略大括号的情况,如下所示

js
if(grade >= 60)
	console.log("及格");
else
	console.log("不及格");

这是可以的,但请读着注意,只有当代码只有一句的时候,可以这样省略书写,下面就是典型的错误写法

js
if(grade >= 60)
	console.log("及格");
else
	grade += 10;
	console.log("送你十分");

这就是典型的错误写法,如果读者使用这种写法,那么 console.log("送你十分"); 这条语句无论如何都会执行,或者说,else 只会对 grade += 10 这一条代码生效。

既然可以这么写,那就会带来一个问题

js
if(grade >= 90)
	console.log("优秀");
if(grade >= 80)
	console.log("良好");
else
	console.log("一般");

像这种代码,就可能会出现歧义,可能会有以下两种理解

js
//理解1
if(grade >= 90){
	console.log("优秀");
	if(grade >= 80)
		console.log("良好");
} else{
	console.log("一般");
}

//理解2
if(grade >= 90){
	console.log("优秀");
}
if(grade >= 80){
	console.log("良好");
}else{
	console.log("一般");
}

这种理解上的歧义有一个专门的名字,叫 else 悬挂,在上面两种理解中,第二个理解是正确的,读者可以这么理解,else 只会和上面离他最近的 if 进行配对。

在实际开发中,个人不建议使用这种省略括号的方式(虽然我经常用)

用户输入

我们要获取用户输入有很多种方式,在后面学习了 DOM 之后,我们可以通过获取页面上表单元素文本框的值来获取用户的输入,但现在还没有学,就介绍一种很简单的方式,使用 prompt 函数。var input = prompt("提示信息"); 这样调用这个函数,就可以提示让用户输入一段内容。用户输入的内容会作为这个函数的返回值,函数的调用其实就是一个表达式,我们知道一个表达式一定有一个返回值吧,忘了就去前面看去。我们可以将它保存到 input 变量。这个函数会阻塞代码,也就是说运行到这个函数之后,代码会暂停执行,只有当用户操作完之后,代码才会继续执行。

如果用户点击了取消,则返回 null
如果用户点击了确定,则返回用户输入的内容(没有内容返回空串)

值得注意的是,prompt 函数返回的内容要么是 null,要么就是一个字符串,只会有这两种情况。

接下来结合 prompt 函数,实现一个功能,这个功能为判断用户的输入是否是数字

js
var input = prompt("请输入一个数字");
if(input == null){
	console.log("你没有输入内容");
}else if(isNaN(+input)){
	console.log("你输入的不是一个合法数字");
}else{
	console.log("输入正确");
}

在变量前面加上正号运算符 +,可以巧妙地将字符串转换为数字类型
只有纯数字的字符串才可以正确转换为数字类型,否则都是 NaN

得到一个随机数

Math.random() 可以返回一个 0 到 1 的随机小数,可能取到 0,但是不能取到 1。

以笔记为镜,可以知得失