能用1行代码搞定的逻辑,绝不用第2行。 ——鲁迅
在游戏编程中,条件判断if-else
是经常会用到的。本文针对if-else
提出一些简化写法,争取将代码控制在一行以内。
1. 使用三元运算符?:
什么是三元运算符
三元运算符又称条件运算符,是对if-else
语句的简化。
let x=false;
let y;
if(x){
y=0;
}else{
y=1;
}
// 同下
let y = x ? 0 : 1;
踩坑记1:表达式转化为布尔值
在三元运算符中,包括if-else
中,表达式会被转化为布尔值的。典型的如null
,undefined
,NaN
类型均会被转为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. 使用逻辑运算符&&,||
逻辑运算符的逻辑
A && B
:如果A为true,则执行B,且整个表达式返回B;如果A为false,则不执行B,且整个表达式返回A。A || B
:相反。用法
逻辑运算符是对三元运算符的进一步简化,用于没有else
语句的情况。 ```typescript let x=0; if(true){ x=1 }
// 使用三元运算符 let x=0; x = true ? 1 : x
// 使用逻辑运算符 let x=0; x = true && 1 ```