2012-06-10 4 views
5

明示的な変換を示す以外に、JavaScriptでdouble型の演算子を使用することに利点はありますか?最近は、新しいAPIの存在をチェックするのが好きではないようですが、決してこれまでの利点を読んだことはありません。この文脈で使用する場合、我々はにチェックされているのでJavaScriptでdouble型(!!)と型強制型変換

if(!!window.File) 
    // The File API is supported. 
else 
    // Your browser sucks. 

私が読んだことがある一つのことは、それはboolean型へのキャストを入力するための簡潔な、あいまいな方法であることであるが、しかし、オブジェクトは自動ではとにかくブール値に強制変換されます定義されているかどうかを確認してください。

要するに、人々はエンジンの上で2つのブール演算を行うのはなぜですか?

+0

リンクで示されるように、グローバルにブール値に変換されます。ここでは主に、コードを読みやすくすることを意図しています。つまり、ブール値だけが必要です。 –

+0

私は正確に何を知っている!疑似オペレータは、私が尋ねたものではありません。 – Vreenak

+2

実際の使用はありません。文章の可読性が悪い習慣です。 –

答えて

7

私はあなたのように文脈でそれを行う理由は本当にありません。結果にいかなる影響も与えません。

私はこれを良い考えとして見ることができるのは、ブール値を返す関数を構築していて、他の値からキャストする必要がある場合です。

function isNotFalsy(val) { return !!val; } 

この例は少し強制的なものかもしれませんが、あなたはそのアイデアを得るでしょう。戻り値がユーザーが期待する型のものであることを常に確認する必要があります。

+0

一番良かったら、いくつかのAPIはブール値を必要とする===/typeofかもしれないことを指摘したいと思います。 – Vreenak

1

ifの式の中に!!を使用する必要はありません。
値をブール値に変換するために使用されています。デフォルトではifが使用されています。

var x = ""; // a falsy value 
!x // true 
!!x // false 

if (x) === if (!!x) 
+0

お返事ありがとうございますが、私はこれを知っています。問題は、そのような一般的な方法であるため、ifステートメントでそれを使用することに利点があるかどうかです。 @watkinsj。 – Vreenak

+2

。私は最初の行でその質問に答えたと信じています... – gdoron

+0

あなたはそれが不要だと言いました。私はこれを指摘した。 if文の中に拡散しているという利点や説明はありません。 @watkinsj。 – Vreenak