js一行If ... else ... else if语句
我知道你可以通过做var variable = (condition) ? (true block) : (else block)
来设置一行if / else语句的var variable = (condition) ? (true block) : (else block)
var variable = (condition) ? (true block) : (else block)
,但我想知道是否有办法在其中放入else if语句。 任何建议,将不胜感激,谢谢大家!
当然,你可以做嵌套的三元操作符,但它们很难阅读。
var variable = (condition) ? (true block) : ((condition2) ? (true block2) : (else block2))
TL;博士
是的,你可以...如果一个然后一个,否则如果B然后如果C然后C(B),否则B,否则空
a ? a : (b ? (c ? c(b) : b) : null)
a
? a
: b
? c
? c(b)
: b
: null
更长的版本
三元运算符?:
用作内联if-else是正确的关联 。 总之这意味着最右边的?
获得第一喂,它需要只有一个操作数最接近的左侧两个 ,有:
,在右边。
实际上,请考虑以下声明(与上述相同):
a ? a : b ? c ? c(b) : b : null
最右边的?
首先得到喂养,所以找到它及其周围的三个参数,并连续向左扩展到另一个?
。
` a ? a : b ? c ? c(b) : b : null ^
<---- RTL
-
|1-?-2----:-3| ^ <-
-
^ <-|1-?|--2---------|:-3---|
3.|1-?-2-😐–3--------------------|
result: a ? a : (b ? (c ? c(b) : b) : null) `
这就是计算机如何读取它:
- 术语
a
被读取。
节点:a
- 非终端
?
被阅读。
节点:a ?
- 术语
a
被读取。
节点:a ? a
a ? a
- 非终结符
:
被读取。
节点:a ? a :
a ? a :
- 术语
b
被读取。
节点:a ? a : b
a ? a : b
- 非终端
?
被读取,触发右相关性规则。 相关性决定:
节点:a ? a : (b ?
a ? a : (b ?
- 术语
c
被读取。
节点:a ? a : (b ? c
a ? a : (b ? c
- 非终端
?
被读取,重新应用右联合性规则。
节点:a ? a : (b ? (c ?
a ? a : (b ? (c ?
- 术语
c(b)
被读取。
节点:a ? a : (b ? (c ? c(b)
a ? a : (b ? (c ? c(b)
- 非终结符
:
被读取。
节点:a ? a : (b ? (c ? c(b) :
a ? a : (b ? (c ? c(b) :
- 术语
b
被读取。
节点:a ? a : (b ? (c ? c(b) : b
a ? a : (b ? (c ? c(b) : b
- 非终结符
:
被读取。 三元运算符?:
从前一个范围满足,范围已关闭。
节点:a ? a : (b ? (c ? c(b) : b) :
a ? a : (b ? (c ? c(b) : b) :
- 术语
null
被读取。
节点:a ? a : (b ? (c ? c(b) : b) : null
a ? a : (b ? (c ? c(b) : b) : null
- 没有令牌可读。 关闭剩余的左括号。
结果是:
a ? a : (b ? (c ? c(b) : b) : null)
a ? a : (b ? (c ? c(b) : b) : null)
更好的可读性
从上面的丑陋的上线者可能(并应该)为了可读性而重写为:
(请注意,压痕不隐式地定义正确的关闭装置,如括号()做的。)a
? a
: b
? c
? c(b)
: b
: null
例如
return a + some_lengthy_variable_name > another_variable
? “yep”
: “nop”
更多阅读
Mozilla:JavaScript条件运算符
Wiki:运算符关联
奖金:逻辑运算符
var a = 0 // 1
var b = 20
var c = null // x=> {console.log(‘b is’, x); return true} // return true here!
a
&& a
|| b
&& c
&& c(b) // if this returns false, || b is processed
|| b
|| null
在这个例子中使用逻辑运算符是丑陋的错误,但这是他们闪耀的地方…
“无结合”
function(mayBeNull) {
var cantBeNull = mayBeNull || 42 // “default” value
var alsoCantBe = mayBeNull ? mayBeNull : 42 // ugly…
…
}
短路评估
false && (anything) // is short-circuit evaluated to false.
true || (anything) // is short-circuit evaluated to true.
逻辑运算符
无结合
短路评估
这主要用于分配变量,它使用二项式条件,例如。
var time = Date().getHours(); // or something
var clockTime = time > 12 ? ‘PM’ : ‘AM’ ;
没有ElseIf,为了开发而不使用链接,如果您在.js中使用多个条件,则可以使用更快的
switch