【问题标题】:Proper use of a comma in javascript ternary operator在 javascript 三元运算符中正确使用逗号
【发布时间】:2013-01-23 09:33:55
【问题描述】:

我尝试使用三元运算符而不是使用 if else 语句,但在我的语句中某处出现语法错误。

谁能告诉我哪里出错了?

声明是:

my_alert(status ? ('Accepted', 'alert-success') : ('Declined', 'alert-info'))
  • my_alert 是一个有 2 个参数的函数。
  • 状态只是评估为真或假。
  • 当我将多个参数传递给上述表达式时,它不喜欢使用逗号。

在 chrome 和 firefox 中,函数运行时会显示“alert-success”或“alert-info”。它错过了第一个参数。

我已经在 stackoverflow 上寻找答案,但无论如何它告诉我我正在做的事情是正确的。

任何帮助都会很棒。

【问题讨论】:

  • my_alert() 函数的属性指纹是什么?我认为您应该将一组参数传递给它,而不是将您的参数包装在 ()

标签: javascript ternary-operator comma-operator


【解决方案1】:

或者,您可以将函数调用包装在三元语句中...

status ? my_alert("Accepted", "alert-success") : my_alert("Declined", "alert-info");

更新:

Robin van Baalen 提出了一个很好的建议……

my_alert.apply(this, status ? ["Accepted", "alert-success"] : ["Declined", "alert-info"]);

【讨论】:

    【解决方案2】:

    好吧,comma operator 执行以下操作:

    逗号运算符计算其两个操作数(从左到右)并返回第二个操作数的值。

    这意味着,('Accepted', 'alert-success') 的计算结果为 'alert-success'(正如您已经注意到的)。这里的逗号不同于分隔函数参数的逗号。您不能使用它将两个参数传递给函数。

    您可以做的是将两个参数存储在一个数组中并使用.apply 将它们传递给函数:

    // this is not the comma operator either, this is array literal syntax.
    var args = status ? ['Accepted', 'alert-success'] : ['Declined', 'alert-info'];
    my_alert.apply(null, args);
    

    【讨论】:

      【解决方案3】:

      你不能这样使用逗号。如果要传递2个参数,则需要使用2个三元语句。

      my_alert((status ? 'Accepted' : 'Declined'), (status ? 'alert-success' : 'alert-info'));
      

      在您的情况下,逗号被读取为comma operator,它计算两个操作数并返回最后一个。所以,你的三元语句相当于:

      my_alert(status ? 'alert-success' : 'alert-info')
      

      【讨论】:

        【解决方案4】:

        我不认为三元运算符可以用来控制这样的两个值:

        如何将它们分开:

        my_alert(($status?"Accepted":"Declined"),($status?"alert-success":"alert-info"));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-18
          • 1970-01-01
          • 2010-10-04
          • 1970-01-01
          • 2017-03-29
          • 1970-01-01
          相关资源
          最近更新 更多