何も持たないelse条件にnull
を常に入れなければなりませんでした。とにかく周りにありますか?例えば。
condition ? x = true : null;
基本的に、行う方法があります:
condition ? x = true;
今では構文エラーとして表示されます
参考までに、実際のサンプルコードを次に示します。
!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null;
まず第一に、三項式はif/else構造の代替ではありません-if-else構造と同等のreturns値です。つまり、if/else句はコードであり、3項式は式であり、値を返すことを意味します。
これはいくつかのことを意味します。
=
の左側に変数がある場合にのみ、3項式を使用しますx = true
はすべての式が最後の値を返すのでtrueを返しますが、xは戻り値に影響を与えずに変更されます)要するに、三項式の「正しい」使用は
var resultofexpression = conditionasboolean ? truepart: falsepart;
例のcondition ? x=true : null ;
の代わりに、三項式を使用してx
の値を設定する場合、これを使用できます。
condition && (x = true);
これはまだ式であり、検証に合格しない可能性があるため、さらに良いアプローチは
void(condition && x = true);
最後のものは検証に合格します。
ただし、期待値がブール値の場合は、条件式自体の結果を使用するだけです
var x = (condition); // var x = (foo == "bar");
UPDATEサンプルに関しては、おそらくこれがより適切です。
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
いいえ、3つのオペランドが必要です。それが、彼らが三項演算子と呼ばれる理由です。
ただし、例として持っているものについては、これを行うことができます:
if(condition) x = true;
将来的に複数のステートメントを追加する必要がある場合は、中括弧を使用する方が安全です。
if(condition) { x = true; }
編集:これで、質問が適用される実際のコードに言及しました。
if(!defaults.slideshowWidth)
{ defaults.slideshowWidth = obj.find('img').width()+'px'; }
var x = condition || null;
多くの場合、人々は論理演算子を使用してステートメントの構文を短縮します。
!defaults.slideshowWidth &&
(defaults.slideshowWidth = obj.find('img').width()+'px');
しかし、あなたの特定のケースでは、構文はさらに簡単になります
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
このコードは、defaults.slideshowWidth
がtrueと評価された場合はdefaults.slideshowWidth
値を返し、そうでない場合はobj.find('img').width()+'px'
値を返します。
詳細については、論理演算子の Short-Circuit Evaluation を参照してください。
あなたは書くことができます
x = condition ? true : x;
したがって、条件が偽の場合、xは変更されません。
これは、その後と同等です
if (condition) x = true
編集:
!defaults.slideshowWidth
? defaults.slideshowWidth = obj.find('img').width()+'px'
: null
いくつかの選択肢があります-これらがより良い/悪いとは言いません-単に選択肢
既存の値がnullであるため、3番目のパラメーターとしてnullを渡すと機能します。リファクタリングして条件を変更すると、これはもはや真実ではないという危険があります。これに対する三次ガードの2番目の選択肢として、既存の値を渡します。
!defaults.slideshowWidth =
? defaults.slideshowWidth = obj.find('img').width()+'px'
: defaults.slideshowwidth
より安全ですが、おそらく見た目が良くありません。実際には、私はおそらく書くだろう
defaults.slideshowWidth = defaults.slideshowWidth
|| obj.find('img').width()+'px'
あなたの場合、三項演算子が冗長であると思います。 ||、&&演算子を使用して、変数を式に直接割り当てることができます。
!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null ;
となります :
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
より明確で、より「javascript」スタイルです。
どうでしょう
if (condition) { code if condition = true };