我没有使用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')