您始终可以重新格式化三元运算符语句以使其更具可读性。格式化是您发现if更具可读性的原因之一:
t[i] == '@' ?
m = '' : // if it's an @
t[i] == '_' ? // else:
m = null : // if it's a _
( // else:
c = t[i].charAt(0), // c = first character
m = // m = one of the following:
c == '@' || c == '_' ? // if @ or _ is first character
t[i].substring(1) : // the string minus @ or _
t[i] // else the string itself
)
请注意,最外面的三元运算符的结果被丢弃,这是非常非常难看的代码。相反,它滥用了三元运算符的条件部分可以是一个表达式并在那里对 m 进行赋值的事实。
基本上上面是一种复杂的写作方式:
if (t[i] =='@') {
m = '';
}
else if (t[i] =='_') {
m = null;
}
else {
m = t[i].replace(/^[@_]/,''); // replace leading @ or _ with nothing
}
如果您仍然需要使用三元运算符并且没有正则表达式,则更好的实现将是:
var str = t[i];
var c = str.charAt(0);
m = str == '@' ? // if @
'' :
str == '_' ? // if _
null :
(c == '@' || c == '_') ? // if starts with @ or _
str.substring[1] :
// else don't modify the string
str;
请注意,在上面的语句中,我们将三元运算符的结果分配给,m而不是在任何评估的语句中进行分配。这首先是三元运算符的优势if。另请注意,大括号()严格来说不是必需的,但它们增加了代码的可读性(恕我直言)。