2012-08-10 14 views
5

Widziałem kawałek kodu, który utknął mi jako dziwne. Co oznacza przełącznik (! 0) w javascript? Jakie są przypadki, w których ta technika byłaby przydatna?(! 0) Co to znaczy

jsTree używa go w kilku miejscach, ale wygląda na obcy. Jestem pewien, że ma to dobry powód, ale nie mogę tego rozgryźć.

http://www.jstree.com/

Oto klip kodu:

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

Ktoś próbuje rozwodnić swój kod powiedziałbym. To jest hackowaty sposób, aby nie używać 'if' i' if else'. –

+0

Prosty styl hipsta yo. –

+0

możliwy duplikat [Co oznacza! 1 i! 0 w języku JavaScript?] (Http://stackoverflow.com/questions/11550681/what-does-1-and-0-mean-in-javascript) –

Odpowiedz

9

To porównanie każdego z przypadków boolean true.

Opracowanie

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

Jeśli !s.data && !s.ajax ocenia się true, to sprawa zostanie wybrany do realizacji.

switch(true) jest taka sama jak switch(!0)

+0

Proszę, rozwiń odpowiedź – MMeah

+2

Zastanawiasz się, dlaczego nie powiedzieli po prostu 'switch (true)' ... – cHao

+0

Czy po prostu zatrzyma się na pierwszym true lub run wszystkie prawdziwe przypadki? – MMeah

2

switch(!0) jest po prostu tak samo jak switch(true).

Ten wzór:

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

działa tak samo jak:

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

Z wyjątkiem instrukcji if nie pozwala na przewinięcie, jeśli 'break' zostanie usunięty. – MMeah

+1

@MMeah: Tak, to prawda. To nie znaczy, że powinieneś go użyć, chociaż ... :) – Guffa