2

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

有人可以告诉我哪里出错了吗?

声明是:

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

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

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

任何帮助都会很棒。

4

4 回答 4

11

好吧,逗号运算符执行以下操作:

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

这意味着,('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);
于 2013-02-07T18:53:15.830 回答
5

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

如何将它们分开:

my_alert(($status?"Accepted":"Declined"),($status?"alert-success":"alert-info"));
于 2013-02-07T18:51:43.713 回答
2

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

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"]);
于 2013-02-07T18:55:36.133 回答
0

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

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

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

my_alert(status ? 'alert-success' : 'alert-info')
于 2013-02-07T18:53:12.613 回答