2016-10-21 6 views
0

私は最近、オブジェクトの前に二重の感嘆符!!を使用して、それがヌルではないことと、空でない文字列ではないことを確認しました。オブジェクトがヌルでないことを確認するには、二重の感嘆符(!!)を使用する必要がありますか?

これは必要ですか?例えば、次のように読むのは難しいです: if(!!name)if(name)

これに関する意見はありますか?私は自分のコードを安全にして、ヌルポインタの例外やその他の事態が発生する可能性のある条件に入らないようにしたいが、私のコードを読めるようにしたい。

答えて

1

!!が時々使用されている

など.. boolean値に何かを強制することです。

if(value) { }

ないvalue限り、真と評価されます:

  • ヌル
  • 未定義
  • NaNの
  • 空の文字列( "")
  • false

Check out the toboolean conversions in the specification.

+0

javascriptのも三項演算子のためにこれをするのでしょうか?例えば、私は 'var hasName = name? true:false; ' – reectrix

+0

hasName = nameは代入でありブール値テストではありません それ以外の場合は、同じ方法で評価される条件に基づいてどの出力を使用するかを単純に決定するため、yesです。 – Bricky

4

いいえ、変数をifの条件として使用している場合は、ダブルバンの必要はありません。単にif (name)は、namefalsyの値でないことを保証するのに十分です。すべてのオブジェクト参照は真実です。 nullは虚偽です。

2

あなたはたとえば、trueをブール値への厳密な比較を必要としない限り、これは完全に不要である:

switch (true) { 
    case foo: 

switch (true) { 
    case !!foo: 

または代わりに、冗長しかしBoolean(foo)読みやすくべき(しないでくださいプリミティブコンストラクタでnewを使用してください)。その逆は真ではないことに注意してください、あなたはfalsey値をテストしている場合、それは0、NaNと有効な値であってもよい空の文字列、ため、問題となり、falseyです:

if (!foo) { // foo had better not be empty string or zero 

しかし、JavaScriptはあなたの提供していますアウトここに(その上でいくつかのしかめ面)が関与緩い平等、nullundefinedはなく、他のfalseyの値に互いに緩く等価です。

null == undefined //true 
null == NaN // false 
undefined == '' // false 
1

は完全に、完全に...無意味、小さなを使用しますおしゃべり

if()は、条件付き値を自動的にブール値に変換します。

!!もブール値を変換します。すでにネイティブにはJavaScriptによって行われているあなたがやっている

var hasElement == !!document.getElementById("zz"); 
関連する問題