zweizhao.github.io

项目,文章,随笔,博客,Markdown,个人网站,人生感悟。

View on GitHub

判断语句分两大类跟一个小类,常用的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 数据匹配情况下,比如明确知道结果是什么,例如错误码处理或日期时间处理。
三目运算符 是非逻辑,仅仅两个逻辑情况下,优先使用。

如果我的文章对你有一点点帮助,我就非常开心了。

我是风蓝小栖,喜欢我的文章请关注一下,定期更新技术文章,满满的干货。