2012-08-10 18 views
5

Vi un código que me pareció extraño. ¿Qué significa cambiar (! 0) en javascript? ¿Cuáles son algunos casos en los que esta técnica sería útil para usar?interruptor (! 0) ¿Qué significa

jsTree lo usa en algunos lugares pero parece extraño. Estoy seguro de que tiene una buena razón para eso, pero no puedo entenderlo.

http://www.jstree.com/

Aquí es un clip de código:

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

Alguien está tratando de ocultar su código diría yo. Esta es una forma hacky de no usar 'if' y' if else'. –

+0

Straight hipsta style yo. –

+0

posible duplicado de [¿Qué quiere decir! 1 y! 0 en Javascript?] (Http://stackoverflow.com/questions/11550681/what-does-1-and-0-mean-in-javascript) –

Respuesta

9

Se compara cada uno de los casos a boolean true.

Abundando

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

Si !s.data && !s.ajax evalúa a true, entonces este caso serán seleccionados para su ejecución.

switch(true) es la misma que switch(!0)

+0

Por favor, elabora tu respuesta – MMeah

+2

Hace que te preguntes por qué no acaban de decir 'cambiar (verdadero)' ... – cHao

+0

¿Se detiene en el primer true o ejecuta todos los casos verdaderos? – MMeah

2

A switch(!0) es simplemente el mismo que switch(true).

Este patrón:

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

funciona igual que:

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

Excepto que la instrucción if no permite el fallout si se elimina el 'break'. – MMeah

+1

@MMeah: Sí, eso es cierto. Eso no significa que debas usarlo, aunque ... :) – Guffa

Cuestiones relacionadas