Javascript一行If…else…else If语句
我知道您可以通过执行Javascript一行If…else…else If语句,javascript,conditional-operator,Javascript,Conditional Operator,我知道您可以通过执行var variable=(条件)用一行if/else语句设置变量?(true块):(else块),但我想知道是否有办法在其中放入else-if语句。任何建议都将不胜感激,谢谢大家 当然,可以使用嵌套的三元运算符,但它们很难读取 var variable = (condition) ? (true block) : ((condition2) ? (true block2) : (else block2)) 您可以根据需要链接任意多个条件。如果您这样做: var x = (
var variable=(条件)用一行if/else语句设置变量?(true块):(else块)
,但我想知道是否有办法在其中放入else-if语句。任何建议都将不胜感激,谢谢大家 当然,可以使用嵌套的三元运算符,但它们很难读取
var variable = (condition) ? (true block) : ((condition2) ? (true block2) : (else block2))
您可以根据需要链接任意多个条件。如果您这样做:
var x = (false)?("1true"):((true)?"2true":"2false");
您将获得x=“2true”
因此,它可以表示为:
var variable = (condition) ? (true block) : ((condition)?(true block):(false block))
这主要用于分配变量,并使用二项式条件
var time = Date().getHours(); // or something
var clockTime = time > 12 ? 'PM' : 'AM' ;
如果为了开发而不使用链接,您可以使用开关
,如果在.js中有多个条件,这会更快;博士
是的,您可以…如果a然后是a,否则如果b然后是c然后是c(b),否则b,否则为空
较长版本
三元运算符?:
在else为右关联时用作内联运算符。简言之,这意味着最右边的?
首先被馈送,它在左边正好取一个最近的操作数,在右边取两个最近的操作数
实际上,考虑下面的陈述(与上述相同):
a?a:b?Cc(b):b:null
最右边的?
首先被馈送,因此找到它及其周围的三个参数,并连续地向左扩展到另一个?
a ? a : b ? c ? c(b) : b : null
^ <---- RTL
1. |1-?-2----:-3|
^ <-
2. |1-?|--2---------|:-3---|
^ <-
3.|1-?-2-:|--3--------------------|
result: a ? a : (b ? (c ? c(b) : b) : null)
比如说
return a + some_lengthy_variable_name > another_variable
? "yep"
: "nop"
更多阅读
奖励:逻辑运算符 在这个例子中使用逻辑运算符是丑陋和错误的,但这正是它们发光的地方 “零合并” 这种方法具有微妙的局限性,如下面的链接所述。有关正确的解决方案,请参见Bonus2中的Nullish合并 短路评估
Bonus2:JS中的新功能 适当的“零聚结” 可选链接 第4阶段完成的提案
我知道这是一根旧线,但我想我应该把我的两分钱放进去。三元运算符可以按以下方式嵌套:
var variable = conditionA ? valueA : (conditionB ? valueB: (conditionC ? valueC : valueD));
例如:
var answer = value === 'foo' ? 1 :
(value === 'bar' ? 2 :
(value === 'foobar' ? 3 : 0));
简言之:
var x = (day == "yes") ? "Good Day!" : (day == "no") ? "Good Night!" : "";
嵌套三元运算符就是您所描述的。看起来这回答了问题:是的,在这种情况下,
if(){…}else if(){…}else{…}
可能更可读。任何三元运算符都很难读取。它们简明扼要,没有描述性。即使是非程序员也知道if()else()可能意味着什么。尽管语法不正确,但嵌套的三元语句中缺少了一个:
。在浏览器中测试…@Masood_Aslami感谢您的更正。我已经投票了。@Fylepo ThanksHi,欢迎来到stack overflow。为了得到一个有用的答案,这个反应需要扩展。解释为什么这是问题的答案。
function f(mayBeNullOrFalsy) {
var cantBeNull = mayBeNullOrFalsy || 42 // "default" value
var alsoCantBe = mayBeNullOrFalsy ? mayBeNullOrFalsy : 42 // ugly...
..
}
false && (anything) // is short-circuit evaluated to false.
true || (anything) // is short-circuit evaluated to true.
function f(mayBeNullOrUndefined, another) {
var cantBeNullOrUndefined = mayBeNullOrUndefined ?? 42
another ??= 37 // nullish coalescing self-assignment
another = another ?? 37 // same effect
..
}
// before
var street = user.address && user.address.street
// after
var street = user.address?.street
// combined with Nullish coalescing
// before
var street = user.address
? user.address.street
: "N/A"
// after
var street = user.address?.street ?? "N/A"
// arrays
obj.someArray?.[index]
// functions
obj.someMethod?.(args)
var variable = conditionA ? valueA : (conditionB ? valueB: (conditionC ? valueC : valueD));
var answer = value === 'foo' ? 1 :
(value === 'bar' ? 2 :
(value === 'foobar' ? 3 : 0));
var x = (day == "yes") ? "Good Day!" : (day == "no") ? "Good Night!" : "";
a === "a" ? do something
: a === "b" ? do something
: do something