javascript三元运算符中逗号的正确使用



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

有人能告诉我哪里出了问题吗?

声明是:

my_alert(status ? ('Accepted', 'alert-success') : ('Declined', 'alert-info'))
  • my_alert是一个有两个参数的函数
  • 状态仅计算为true或false
  • 当我向上面的表达式中传递多个参数时,它不喜欢使用逗号

在chrome和firefox中,当函数运行时,它会显示"警报成功"或"警报信息"。它漏掉了第一个参数。

我一直在寻找答案,但无论如何,它告诉我我所做的是正确的。

任何帮助都会很棒。

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

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

也就是说,('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);

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

把它们分开怎么样:

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

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

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

更新:

罗宾·范·巴伦提出了一个很好的建议。。。

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新