Widziałem kawałek kodu, który utknął mnie jako dziwny. Co oznacza przełącznik (! 0) w JavaScript? Jakie są przypadki, w których ta technika byłaby przydatna w użyciu?

JSRee używa go w kilku miejscach, ale wygląda obce. Jestem pewien, że ma to dobry powód za nim, ale nie mogę tego zrozumieć.

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;
}
5
MMeah 11 sierpień 2012, 03:37

2 odpowiedzi

Najlepsza odpowiedź

Porównuje każdy z przypadków do boolean true.

opracowywanie

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

Jeśli !s.data && !s.ajax ocenia true, a następnie ten przypadek zostanie wybrany do wykonania.

switch(true) jest taki sam jak switch(!0)

9
wanovak 10 sierpień 2012, 23:39

switch(!0) jest po prostu taki sam 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;
}
2
Guffa 10 sierpień 2012, 23:53