web-dev-qa-db-ja.com

Javascript Ternary演算子と||

私は以前にいくつかのnode.jsコードを調べていましたが、それを書いた人は次の構文を好むように見えました。

var fn = function (param) {
    var paramWithDefault = null == param ? 'Default Value' : param;
}

私がより簡潔であると考えるものの上に:

var fn = function (param) {
    var paramWithDefault = param || 'Default Value';
}

2番目の形式が実際に社会的に受け入れられるJavaScript構文であるかどうか疑問に思っていましたが、この目的のために、3項演算子よりも実際に見たことがあります。

最初の例では、彼は(3つのイコールではなく)2つのイコールを使用していることに注意してください。ただし、==がJavaScriptでかなり邪悪な演算子であることをさまざまな場所で読んだことがあります(JSLintはこれに強く反対しています、IIRC)。

17
Ed James

このコードは、0、 ""、false、またはその他の偽の値を渡すたびに「デフォルト値」に評価されるためです。

function fn(param) {
  var paramWithDefault = param || 'Default Value';
  return paramWithDefault;
}

この特定の関数の使用方法については気にしないかもしれませんが、空の文字列や0やブール値などを渡すことを気にするときに回避するのは悪いパターンです。

17
Peter Smith

本当に必要なのは、ヌル合体演算子です。しかし、JavaScriptには実際にはJavascriptがないため、プログラマ 通常 '||'を使用します。それに代わって。

ただし、どちらも完全に妥当です。 null合体演算子が何であるかを理解していない人にとっては、三項演算子がおそらく理解される可能性が高くなります。

7
Malfist