2012-06-10 10 views
5

C'è qualche vantaggio, tranne l'indicazione di una conversione esplicita, all'utilizzo di un operatore double not in JavaScript? Spesso sembra che oggigiorno le persone amano verificare l'esistenza di nuove API usando il doppio no, ma non ho mai, mai letto alcun vantaggio.double not (!!) contro tipo coercizione in JavaScript

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

L'unica cosa che ho letto è che si tratta di un conciso, oscuro modo di digitare cast booleano, tuttavia, se usato in questo contesto, l'oggetto sarà automaticamente costretto a booleano in ogni modo dal momento stiamo verificando a vedi se è definito.

In breve, perché le persone eseguono due operazioni booleane su quelle del motore?

+0

Come dimostrato dal collegamento, effettua globalmente una conversione in un booleano. Qui è principalmente inteso a rendere il codice più leggibile, il che significa che è necessario solo il valore booleano. –

+0

So esattamente cosa !! l'operatore pseudo lo fa, non è quello che ho chiesto. – Vreenak

+2

Non c'è un uso reale, è una cattiva abitudine avere per la leggibilità del pretesto. –

risposta

7

Non vedo alcun motivo per farlo nel contesto come se fosse presente. Non influenzerà il risultato in alcun modo.

L'unica volta che mi piacerebbe vedere questo come una buona idea è che se si sta costruendo una funzione che dovrebbe restituire un valore booleano, ed è necessario gettalo via da qualche altro valore, ad esempio ...

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

L'esempio potrebbe essere un po 'forzato, ma si ottiene l'idea. Dovresti sempre assicurarti che il valore restituito sia del tipo che l'utente si aspetterebbe.

+0

Accettato come migliore, vorrei sottolineare @Pointy alcune API potrebbero ===/typeof per richiedere valori booleani. – Vreenak

1

Non è necessario utilizzare !! all'interno di un'espressione if.
Viene utilizzato il valore convertito in booleano e lo standard if lo utilizza per impostazione predefinita.

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

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

Grazie per aver risposto, ma lo so. La domanda era se c'è qualche vantaggio nell'usarlo in una dichiarazione if, poiché è una pratica così comune. – Vreenak

+2

@watkinsj. Credo di aver risposto a questa domanda nella prima riga ... – gdoron

+0

Hai detto che non è necessario. Ho sottolineato questo nella domanda. Non vedo nessuna risposta riguardo a vantaggi o spiegazioni per la sua proliferazione all'interno dell'istruzione if. – Vreenak