1、三元运算符
在实际工作中,我们常常需要对一个变量或表达式进行判断,根据不同的条件来执行不同的操作,通常情况下需要使用 if...else
语句。但是 if...else
语句过于冗长和繁琐,可以使用三元运算符来优化。
以实现一个状态机的代码为例,原始的代码可能长这样:
function handleEvent(event) { if (currentState === STATE_INITIAL) { // do something } else if (currentState === STATE_SECONDARY) { // do something } else if (currentState === STATE_FINAL) { // do something } }
三元运算符可以用于精简此类代码:
function handleEvent(event) { currentState === STATE_INITIAL ? // do something : currentState === STATE_SECONDARY ? // do something : // do something }
使用三元运算符可以使得代码更加简洁易懂,并且减少代码文件大小。同时,三元运算符可以提高代码可读性,逻辑也可以一眼看出来,从而更快速地找到问题所在和进行调试。在某些特定场景下,使用三元运算符还可以提高性能,因为有些引擎不能很好地理解 if...else
语句的含义,从而会降低其性能表现。
注意:虽然使用三元运算符来优化
if...else
语句能够大大提高代码的可读性、可维护性和性能表现,值得我们在实际工作中加以运用。不过需要注意的是,如果一个条件比较复杂或者拥有多个分支时,使用三元运算符会让代码难以阅读和理解,切忌不要滥用。
2、耍点小聪明
来看两个特定场景下的”小聪明技巧“~
2.1 短路求值(Short-circuit Evaluation)
短路求值是指在逻辑运算中,如果第一个表达式已经能够确定整个表达式的值,就不再计算后面的表达式。利用这个特性,可以通过 &&
和 ||
运算符来缩短 if...else
语句。例如:
let x = 10; let result; if (x > 5) { result = "x is greater than 5"; } else { result = "x is less than or equal to 5"; } // 利用 && 运算符 let x = 10; let result = x > 5 && "x is greater than 5" || "x is less than or equal to 5";
2.2 字符串拼接
先来看一类比较特殊的 if...else
语句:
function setAccType(accType) { if (accType == "PLATINUM") { return "Platinum Customer"; } else if (accType == "GOLD") { return "Gold Customer"; } else if (accType == "SILVER") { return "Silver Customer"; } }
像这种条件和返回值有非常强的相关性的语句,通常我们就可以通过下面这种非常简洁的方式来处理,让多行秒变一行:
function setAccType(accType){ return accType[0] + accType.slice(1).toLowerCase() + ' Customer'; // or return `${accType[0] + accType.slice(1).toLowerCase()} Customer`; }
3、switch/case
switch/case
语句也是比较常用的技巧,来看下面这个例子:
if (status === 200) { handleSuccess() } else if (status === 401) { handleUnauthorized() } else if (status === 404) { handleNotFound() } else { handleUnknownError() }
像这样的,我们就可以通过 switch/case
来进行处理:
switch (status) { case 200: handleSuccess() break case 401: handleUnauthorized() break case 404: handleNotFound() break default: handleUnknownError() break }
虽然多了几行代码,但避免了一次又一次的重复的全等检查,而且整体上更精简、直观。