能用1行代码搞定的逻辑,绝不用第2行。 ——鲁迅

在游戏编程中,条件判断if-else是经常会用到的。本文针对if-else提出一些简化写法,争取将代码控制在一行以内。

1. 使用三元运算符?:

什么是三元运算符

三元运算符又称条件运算符,是对if-else语句的简化。

  1. let x=false;
  2. let y;
  3. if(x){
  4. y=0;
  5. }else{
  6. y=1;
  7. }
  8. // 同下
  9. let y = x ? 0 : 1;

踩坑记1:表达式转化为布尔值

在三元运算符中,包括if-else中,表达式会被转化为布尔值的。典型的如nullundefinedNaN类型均会被转为false,另外要特别注意数字0和空字符串""也会被转化为false

踩坑记2:后接表达式(有返回值)而不是语句(无返回值)

在js中,“表达式”和“语句”是有区别的,除了关键字以外的区别,还有一个重要的区别就是:表达式有返回值,语句无返回值。而在三元运算符中,?:后接的是有返回值的表达式,不能当做语句使用。例如:

let x;
let f=()=>{x=1};
if(false){
  x=0;
}else{
  f()
}
// 以上,x=1

let x= false ? 0 : f()
// 以上,x=undefined,因为f()被当做一个表达式而非语句

// 上述情况不可用三元运算符计算
// 有一个替代品,但是一般不用于赋值逻辑上,如下所示:
let x;
let f1=()=>{x=0};
let f2=()=>{x=1};
false?f1():f2();

2. 使用逻辑运算符&&,||

逻辑运算符的逻辑

  1. A && B:如果A为true,则执行B,且整个表达式返回B;如果A为false,则不执行B,且整个表达式返回A。
  2. A || B:相反。

    用法

    逻辑运算符是对三元运算符的进一步简化,用于没有else语句的情况。 ```typescript let x=0; if(true){ x=1 }

// 使用三元运算符 let x=0; x = true ? 1 : x

// 使用逻辑运算符 let x=0; x = true && 1 ```