2012-08-10 17 views
5

Ho visto un pezzo di codice che mi ha bloccato come strano. Che cosa significa switch (! 0) in javascript? Quali sono alcuni casi in cui questa tecnica sarebbe utile da usare?switch (! 0) Che cosa significa

jsTree lo utilizza in alcuni punti ma sembra estraneo. Sono sicuro che abbia una buona ragione, ma non riesco a capirlo.

http://www.jstree.com/

Ecco una clip di codice:

switch(!0) { 
    case (!s.data && !s.ajax): throw "Neither data nor ajax settings supplied."; 
    case ($.isFunction(s.data)): //... 
           break; 
} 
+2

Qualcuno sta cercando di offuscare il loro codice direi. Questo è un modo hacky per non usare 'if' e' if else'. –

+0

stile hipsta dritto yo. –

+0

possibile duplicato di [Che cosa significa! 1 e! 0 significa in Javascript?] (Http://stackoverflow.com/questions/11550681/what-does-1-and-0-mean-in-javascript) –

risposta

9

Si confrontano ciascuno dei casi per boolean true.

Elaborando

case (!s.data && !s.ajax) 

Se !s.data && !s.ajax viene valutato come true, allora questo caso saranno selezionati per l'esecuzione.

switch(true) è uguale switch(!0)

+0

Prego elaborare la tua risposta – MMeah

+2

Ti chiedi perché non hanno appena detto 'switch (true)' ... – cHao

+0

Si ferma solo sul primo vero o run tutti i casi veri? – MMeah

2

Un switch(!0) è semplicemente lo stesso switch(true).

Questo modello:

switch (true) { 
    case (condition): do something; break; 
    case (condition): do something; break; 
    case (condition): do something; break; 
} 

funziona allo stesso modo:

if (condition) { 
    do something; 
} else if (condition) { 
    do something; 
} else if (condition) { 
    do something; 
} 
+0

Tranne che l'istruzione if non consente l'annullamento se l'interruzione '' viene rimossa. – MMeah

+1

@MMeah: Sì, è vero. Questo non significa che dovresti usarlo, però ... :) – Guffa

Problemi correlati