2012-08-10 213 views
5

我看到一段代碼讓我覺得奇怪。 開關(!0)在JavaScript中意味着什麼?有些情況下這種技術對使用有用?switch(!0)這是什麼意思

jsTree在一些地方使用它,但它看起來很陌生。我相信它背後有一個很好的理由,但無法弄清楚。

http://www.jstree.com/

這裏是一個代碼片段:

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

有人正試圖混淆他們的代碼,我會說。這是一種不使用'if'和'if else'的方法。 – 2012-08-10 23:41:05

+0

直hipsta風格喲。 – 2012-08-10 23:42:40

+0

可能的重複[在Javascript中!1和!0是什麼意思?](http://stackoverflow.com/questions/11550681/what-does-1-and-0-mean-in-javascript) – 2012-08-11 00:00:01

回答

9

它的每個案件比較boolean true

闡述

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

如果!s.data && !s.ajax評估爲true,那麼這種情況下將被選擇以供執行。

switch(true)相同switch(!0)

+0

請詳細說明你的答案 – MMeah 2012-08-10 23:40:07

+2

讓你想知道他們爲什麼不只是說'switch(true)'...... – cHao 2012-08-10 23:40:09

+0

它只是停止在第一個真正的或運行所有的真實情況? – MMeah 2012-08-10 23:42:50

2

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

這種模式:

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; 
} 
+0

除了if語句不允許通過'break'被刪除。 – MMeah 2012-08-10 23:58:24

+1

@MMeah:是的,那是真的。這並不意味着你應該使用它,但... :) – Guffa 2012-08-11 00:06:10