2012-08-10 6 views
5

Ich sah ein Stück Code, der mich als seltsam feststeckte. Was bedeutet Wechsel (! 0) in Javascript? In welchen Fällen könnte diese Technik nützlich sein?wechseln (! 0) Was bedeutet es

jsTree verwendet es an einigen Stellen, aber es sieht fremd aus. Ich bin mir sicher, dass es einen guten Grund dafür gibt, aber ich kann es nicht herausfinden.

http://www.jstree.com/

Hier ist ein Clip von Code:

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

Jemand versucht, ihren Code zu verschleiern würde ich sagen. Dies ist ein hacky Weg, 'if' und' if else' nicht zu verwenden. –

+0

Gerade Hipsta Stil yo. –

+0

mögliche Duplikate von [Was bedeutet! 1 und! 0 in Javascript?] (Http://stackoverflow.com/questions/11550681/what-does-1-and-0-mean-in-javascript) –

Antwort

9

Es ist jedem der Fälle zu boolean true zu vergleichen.

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

Wenn !s.data && !s.ajax zu true auswertet, dann ist dieser Fall für die Ausführung ausgewählt werden Ausarbeiten.

switch(true) ist die gleiche wie switch(!0)

+0

Bitte erarbeiten Sie Ihre Antwort – MMeah

+2

lässt Sie sich fragen, warum sie nicht nur sagen "Schalter (true)" ... – cHao

+0

Tut es einfach auf der ersten wahren oder Lauf alle wahren Fälle? – MMeah

2

A switch(!0) ist einfach das gleiche wie switch(true).

Dieses Muster:

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

Funktioniert wie:

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

Mit Ausnahme der if-Anweisung ist kein Durchfallen möglich, wenn die 'break'-Anweisung entfernt wird. – MMeah

+1

@MMeah: Ja, das ist wahr. Das heißt nicht, dass du es benutzen solltest, aber ... :) – Guffa