1. ホーム
  2. javascript

[解決済み] JavaScriptの三項演算子で "else "がないもの

2022-02-17 05:28:56

質問

いつも null を何も持っていないelse条件に追加してください。回避する方法はないのでしょうか?

例えば

condition ? x = true : null;

基本的には、以下のような方法があるのでしょうか?

condition ? x = true;

今度はシンタックスエラーとして表示されるようになりました。

参考までに、実際のサンプルコードを紹介します。

!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null;

解決方法は?

まず、三項式はif/else構文に代わるものではなく、以下のようなif/else構文と等価なものです。 を返す 値です。つまり、if/else句はコードであり、三項式は つまり、値を返すということです。

これにはいくつかの意味がある。

  • の左辺に変数がある場合のみ、三項式を使用します。 = を返します。
  • 返り値が2つの値のうちの1つになる場合のみ、3項式を使用します(適切であれば、ネストされた式を使用します)。
  • 式の各部分 (? の後と : の後) は副作用のない値を返す必要があります (式 x = true は、すべての式が最後の値を返すように真を返しますが、x が返される値に影響を与えることなく x も変更されます)

要するに、3項式の「正しい」使い方は、以下の通りです。

var resultofexpression = conditionasboolean ? truepart: falsepart;

あなたの例の代わりに condition ? x=true : null ; の値を設定するために三項式を使用しています。 x を使用すると、このようになります。

 condition && (x = true);

これはまだ式であり、したがってバリデーションを通過しないかもしれません。

 void(condition && x = true);

最後はバリデーションを通過します。

でもって、期待値がブール値なら、条件式の結果そのものを使えばいいわけです

var x = (condition); // var x = (foo == "bar");


アップデイト

サンプルとの関連では、こちらの方が適切でしょう。

defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';