Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript一行If…else…else If语句_Javascript_Conditional Operator - Fatal编程技术网

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