2

if else ステートメントを使用するのではなく、三項演算子を使用しようとしていますが、ステートメントのどこかに構文エラーがあります。

誰かが私が間違っている場所を教えてもらえますか?

声明は次のとおりです。

my_alert(status ? ('Accepted', 'alert-success') : ('Declined', 'alert-info'))
  • my_alert は、2 つのパラメーターを持つ関数です。
  • ステータスは単に true または false に評価されます。
  • 上記の式に複数のパラメーターを渡すと、コンマの使用が気に入りません。

関数が実行されると、chrome および firefox では、「alert-success」または「alert-info」が表示されます。最初のパラメーターがありません。

私は答えを求めてstackoverflowを見てきましたが、どうしても私がやっていることは正しいと言っています。

どんな助けでも素晴らしいでしょう。

4

4 に答える 4

11

コンマ演算子は次のことを行います。

コンマ演算子は、両方のオペランドを (左から右に) 評価し、2 番目のオペランドの値を返します。

つまり、(既にお気づきのように)に('Accepted', 'alert-success')評価されます。'alert-success'ここでのコンマは、関数の引数を区切るコンマとは異なります。関数に 2 つの引数を渡すために使用することはできません。

できることは、両方の引数を配列に格納し、.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

三項演算子を使用して、次のような 2 つの値を制御できるとは思いません。

それらを分離するのはどうですか:

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 に答える