代码之家  ›  专栏  ›  技术社区  ›  Probosckie

带有空else的Javascript三元运算符

  •  7
  • Probosckie  · 技术社区  · 9 年前

    我试图将以下if else转换为javascript中的三元运算符表示,如下所示

    var x = 2;
    if (x === 2) {alert("2");}
    else
             { //do nothing}
    

    但当我这样做时:

    (t==2)?(alert("1")):();
    

    Chrome抛出SyntaxError。

    我的问题是- 如何在javascript中使用带有空“else”分支的三元运算符-即“:”之后的部分。 此外,这是否允许-在javascript中使用三元运算符来执行语句-不执行赋值。

    另外:上述代码只是一个基本情况。实际上,我正在尝试将页面的所有DOM元素作为一个数组(称为all2),然后仅将这些元素添加到另一个数组中(仅称为),前提是它们具有非空类名。这是我的代码:

    all2.forEach(function(e){ e.getAttribute("class") ? (only.push(e.getAttribute("class"))) : (); }); 
    

    如果我将第三个操作数留空,它将抛出语法错误。传递空值有效

    7 回复  |  直到 9 年前
        1
  •  11
  •   Nina Scholz    9 年前

    在评论中回答您的真实问题:

    all2.forEach(function (e) {
        e.getAttribute("class") && only.push(e.getAttribute("class"));
    });
    
        2
  •  7
  •   Pratik Joshi    9 年前

    执行以下操作:

    (t==2)?(alert("1")):null;
    

    可以用任何没有副作用的表达式替换null。()不是有效的表达式。

        3
  •  4
  •   MoLow    9 年前

    您有几个选项可以在一行中很好地做到这一点:

    选项1-noop函数

    设置全局noop函数:

    function noop(){}
    (t==2)?(alert("1")):(noop());
    

    选项2-&&操作人员

    当您使用&&运算符,只有在前一个操作数为true时才计算操作数,因此您可以简单地写:

    (t==2) && alert("1");
    

    或者,例如,如果您有一个要推送的arry,您可以在之前测试它是否为空:

    arr && arr.push(obj)
    
        4
  •  4
  •   user3165588 user3165588    9 年前

    你放了很多无用的括号,js中最好的NULL值是 undefined .

    document.getElementById('btn-ok').onclick = function(){
      var val = document.getElementById('txt-val').value;
      
      val == 2 ? alert(val) : undefined;
    }
    <input id="txt-val" type="number" />
    <button type="button" id="btn-ok">Ok</button>

    使用单线 if 但声明更好

    if(value === 2) alert(value);
    
        5
  •  3
  •   4b0 Agit    5 年前

    我也不喜欢。所以你在寻找替代品的道路上走对了。

    在这种情况下,我会写道:

    t===2 && alert("2")
    

    你的想法也是有效的,例如你可以这样做:

    t===2 ? alert("2") : null
    

    但这是四个额外的字符。

        6
  •  2
  •   Milos Miskone Sretin    9 年前

    在这种情况下,您不需要使用三元运算符。三元运算符需要第三个参数。

    条件表达式1:表达式2

    Lokki位于 Conditional (ternary) Operator

    您可以使用 if statement

    if ( t == 2 ) alert(1);
    
        7
  •  2
  •   venkat7668    9 年前

    不,不能有空的else,最好不要使用三元运算符,它需要第三个参数。使用简单的if条件。

    if(t==2) alert("2");