开关(!0)是什么意思

MMe*_*eah 5 javascript jquery jstree

我看到一段代码让我感到奇怪.切换(!0)在javascript中的含义是什么?在这种技术有用的情况下,有哪些情况?

jsTree在一些地方使用它,但它看起来很陌生.我确信它背后有充分的理由,但无法弄明白.

http://www.jstree.com/

这是一段代码:

switch(!0) {
    case (!s.data && !s.ajax): throw "Neither data nor ajax settings supplied.";
    case ($.isFunction(s.data)): //...
                                 break;
}
Run Code Online (Sandbox Code Playgroud)

wan*_*vak 9

它将每个案例进行比较boolean true.

在阐述

case (!s.data && !s.ajax)
Run Code Online (Sandbox Code Playgroud)

如果!s.data && !s.ajax求值为true,则将选择执行此案例.

switch(true) 是相同的 switch(!0)

  • `!0`是2个字符.`true`是4.超级优化!;-) (4认同)
  • 即便如此,它也不会被评估.如果没有"break","return"或"throw",程序将直接进入第二种情况,而无需检查其相关条件. (2认同)
  • @JohnNelson这是一个很好的建议,JS minifiers将`true`转换为`!0`和`false`转换为`!1` ^ _ ^ (2认同)