2016-06-30 10 views
3

私は変数の存在をテストする場合は、この方法を見つけましたか?それは良い練習ですか?なぜ "if(変数)"ではなく "if(!!変数)"ですか?</p> <pre><code>if(!!variable) { //Do something } else { //Something else } </code></pre> <p><code>if(!!variable)</code>の代わり<code>if(variable)</code>をテストするための理由がある:誰か他の人のコードで

+1

実際、なぜですか?私にはわかりにくいですね。他人の言うことを見るのを待つことはできません。 – duffymo

+0

'!!'は、何かを 'bool'に変換することだけが考えられます。例えば。 'var i = !! 0; console.log(i); //偽(0の代わりに) '。 – Arg0n

+1

この特定のケースでは、それは何の違いもありません。しかし、任意の値をブール値に変換したいときに便利です(後でデータベースに保存するなど) –

答えて

6

代わりif(!!variable)をテストするための理由がありますif(variable)if()を使用して

はとにかくブールに条件を強制します、手動で行う必要はありません。構文のこの種を使用すると、たとえば、あなたが他の場所でブールを持って保証したいときは、式のtruthinessを記録したい場合は理にかなっての使用:

console.log(!!variable) 

これは、あなたがtruefalseのいずれかを取得することが保証されます変数の元の値ではなく、ログに記録されます。しかし、ifの中に?違いはありません。

+0

他の論理演算子と一緒に使うと便利です: '0 && true'は例えば0を返します。ブール値が必要な場合は、 '!! 0 && true'を試してください。 – ftor

+0

@ LUH3417確かに。しかし、それらの両方は 'if()'の中で同じように振る舞います。これは質問が求めていたものです。 –

-3

ダブル!!!)は演算子ではありません。それはただ !二回 - 二重否定

+0

しかし、なぜここで具体的に使用するのですか?ブールが保証されている変数に代入されているようなものではありません。 –

+1

これはどのようにして質問に答えますか? JFYI、質問は "この' !!演算子は何ですか?それは何ですか? " –

-2

二重否定はBOOLする変数を変換するためのハック方法(私見)のビットです。変数に!を使用すると、ブールに変換され、それを否定し、再度使用して '正しい'値に戻します。ジェームズが言及したように!!0 === false

if文の内部でこれを実行する理由はありません。本当にこれを行うための唯一の理由は、ロギング目的またはのためにブール値に強制することです似たよう記録された値がtrueまたはfalseではなく0、空の文字列であるなど

+0

'if(0)'と 'if(!! 0)'の相違点 –

+0

@SergioTulentsev 'if'が値をとにかく強制するため、違いはありません。 – Anduril

+1

これは、あなたの答えが実際の質問に答えないことを示唆する私の試みでした。 –

0

いいえ、ifの場合、通常、JSにそれを書き込む理由はありません。

それは多くの場合、強く型付けされた言語から来たプログラマから来て、thoses言語でBOOLへの変換を行うための一般的な簡単な方法であることができるので、私は、悪い習慣、それを呼び出すことはありません。

また、もし長期で価値のtruthinessの重要性を強調し、プログラマがトン条件を置くことを忘れなかったのを示すために使用することができます。

TL:DR:多くのことについては:それは良い習慣ではないかもしれないが、それは、あなたのチームはその練習に使用されていない場合のいずれか、悪い習慣になって、文書をそれらを訓練する、またはそれを残します。

関連する問題

 関連する問題