Javascript 开关(!0)这是什么意思

Javascript 开关(!0)这是什么意思,javascript,jquery,jstree,Javascript,Jquery,Jstree,我看到一段代码让我觉得很奇怪。 开关(!0)在javascript中是什么意思?在哪些情况下,这种技术会有用 jsTree在一些地方使用它,但它看起来很陌生。我相信这背后有一个很好的理由,但我想不出来 下面是一段代码: switch(!0) { case (!s.data && !s.ajax): throw "Neither data nor ajax settings supplied."; case ($.isFunction(s.data)): //..

我看到一段代码让我觉得很奇怪。 开关(!0)在javascript中是什么意思?在哪些情况下,这种技术会有用

jsTree在一些地方使用它,但它看起来很陌生。我相信这背后有一个很好的理由,但我想不出来

下面是一段代码:

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

它将每个案例与
布尔值true
进行比较

详述

如果
!s、 数据&!s、 ajax
的计算结果为
true
,然后将选择此案例执行

开关(真)
开关(!0)
开关(!0)与
开关(真)
完全相同

这种模式:

switch (true) {
  case (condition): do something; break;
  case (condition): do something; break;
  case (condition): do something; break;
}
工作原理与:

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

我得说,有人试图混淆他们的代码。这是一种不使用
if
if-else
的黑客方式。由于感官代码过于主流,可能会重复。还有,我说我们应该给这些尤达开关命名。@Mahn-HA!我支持新学期+1评论如果你喜欢新术语“Yoda Switchs”,它是在第一个正确的情况下停止还是运行所有正确的情况?这取决于第一个情况是否通过。即使在那时也不会进行评估。如果没有
中断
返回
、或
抛出
,程序将直接进入第二种情况,而不必检查其相关条件。
!0
为2个字符
true
为4。超级优化!;-)@JohnNelson这是一个很好的建议,JS迷你们可以将
true
转换为
!0
错误
!1
^^^除非if语句不允许在删除
中断
时出现故障。@MMeah:是的,这是正确的。这并不意味着你应该使用它,尽管…:)
if (condition) {
  do something;
} else if (condition) {
  do something;
} else if (condition) {
  do something;
}