判断语句分两大类跟一个小类,常用的if与相对不怎么常用的switch,没错switch当然是判断语句。
不要忘了常用的三目运算符:x ? y : z
不过在讲两者之前,还是有些基础知识需要介绍一下,本车很稳,放心乘坐。
运算符运算符 | 描述 | 例子 | |
---|---|---|---|
== | 等于 | 1 == 8 // false | |
=== | 全等(值和类型) | 5 === 5 //true;5 === "5" // false | |
!= | 不等于 | 1 != 8 // true | |
!== | 不全等 | 1 !== '1' // true | |
> | 大于 | 1 > 8 // false | |
< | 小于 | 1 < 8 // true | |
>= | 大于或等于 | 1 >= 8 // false | |
<= | 小于或等于 | 1 <= 8 // true | |
&& | 且(全是真才是真) | 1 == '1' && 2 == 2 // true | |
|| | 或(有真即为真) | 1 === '1' | 2 == 2 // true |
! | 非(真假取反) | !true // false |
以上都是支持连续运算的(从左往右),比如:
1 == 1 != '1'
,当然也支持括号,但是括号不代表优先级,只代表一体性,比如:1 == (1 != '1')
。
if语法
判断是否为真,为真则执行。
if单独
形如:
// 单句
if(条件) 语句
// 多语句
if(条件) {
语句
}
为单独的if语句,两者区别在于后面语句是否为单句,若单句则推荐使用无大括号的,非单句则必须使用大括号。
不要抬杠,不论是美感还是规范,现代前端都应该在单句情况下使用无大括号模式,详情请查阅 GitHub说明。
所谓单句,就是指无空格间断的语句,所以像包含
let function class
等等语法,都不属于单句 ,切记!
if...else语句
形如:
// 都是单句
if(条件) 语句1
else 语句2
// 单双混合
if(条件) {
语句1
} else 语句2
// 单双混合
if(条件) 语句1
else {
语句2
}
// 多语句
if(条件) {
语句1
} else {
语句2
}
与if单独语法比起来多了一个else语法,很明显,就是当不满足if条件的时候,即语句1不执行的情况下,会执行else下的语句2。
不要抬杠,不论是美感还是规范,现代前端都应该在if大括号结束的后面直接空格加上else或if else,详情请查阅 GitHub说明。
if...else if...else if...(else)多判断语句
形如:
// 不做单句讲解,多语句情况参考上面
// if与else if还有else同在情况
if(条件1) 语句1
else if(条件2) 语句2
else if(条件3) 语句3
...
else if(条件n) 语句n
else 语句4
// 只有if与else if
if(条件1) 语句1
else if(条件2) 语句2
else if(条件3) 语句3
...
else if(条件n) 语句n
实例如下
let month = 3 // 这个是月份,获取方式随意,可以是任意整数(其他情况暂不考虑),使用if语句可以全部解决
let result = '' // 保存结果
if(month >= 1 && month <= 3) result = '第一季度'
else if(month >=4 && month <= 6) result = '第二季度'
else if(month >= 7 && month <= 9) result = '第三季度'
else if(month >= 10 && month <= 12) result = '第四季度'
else result = '非法值'
console.log(result) // 打印结果
使用if语法逻辑处理是非常好用的,也可以嵌套使用等,灵活性很高,也非常简单。
具体其他各种判断与情况,就会根据业务来处理了,这里不做一一讲解。
switch语法
switch算是异常简单逻辑判断,不对,严格来说算是逻辑匹配,
形如:
let n = 1
// 不赘述单句问题
switch(n)
{
case 1:
语句1
break;
case 2:
语句2
break;
default:
n 与 case 1 和 case 2 不同时执行的代码
}
这里的case可以和if里面的if与else if相对照,default对比else即可。区别在于if是可以判断条件,而case只能是匹配,就是两者 ===
情况下才行。
例如:
let day = 1
switch(day) {
case day < 2:
console.log('判断')
break
case '1':
console.log('字符串')
break
case 1:
console.log('数字')
break
}
// 结果是"数字"
眼尖的同学可能看到上面似乎有问题,少了default?这是js,无default是合法的,跟else if语句没有else一样合法。
记住switch是匹配,不是判断。
break的作用是跳出switch的意思,就是下面代码不再执行,也就是说如果不带break的语句恰好是被匹配到的语句,那么其下面的语句将无条件执行。请务必带上break,除非没有是最后一种匹配结果或default。
三目运算符
形如:条件 ? 单句1 : 单句2
形式的表达式。
问号后面单句1是在条件为真的情况下执行,冒号后面单句2是条件为假的情况下执行。
记住一句话:如果怎样,就这样,否则那样。
上面就是使用三目运算符的场景了,例子如下:
let a = 3
let b = 0
a > 0 ? b = 1 : b = -1 // 理解就是,如果a大于0,b就等于1,否则b等于-1,所以结果是b等于1
三目运算符小技巧:
let a = 1
let b
// bad
b = a > 0 ? true : false // 坑爹的三目运算符写法
// good
b = a > 0 // 上一种坑爹是因为都是废话,比较运算符返回的就是布尔值
// best
b = !!a // !!相当于new Boolean(a),强制转换成布尔值,多炫酷
三木运算符坑爹的是可以套用,比如:
a > 0 ? a > 0 ? b = 1 : b = -1 : a > 0 ? b = 1 : b = -1
,相信我,你这样用,会被打死。
总结
判断语句 | 使用场景 |
---|---|
if | 单逻辑,或多逻辑,或懒得写三木与switch。 |
switch | 数据匹配情况下,比如明确知道结果是什么,例如错误码处理或日期时间处理。 |
三目运算符 | 是非逻辑,仅仅两个逻辑情况下,优先使用。 |
如果我的文章对你有一点点帮助,我就非常开心了。
我是风蓝小栖,喜欢我的文章请关注一下,定期更新技术文章,满满的干货。