很早以前就覺得switch很怪異,或者說一直沒太理解它,它怪異就怪異在非要給每個語句加上break;不然後面的語句就算不符合條件還是會執行,比如以下這段**
var num = 2;
switch(num)
執行效果如下
明明只有2才符合條件,但3跟4也被執行了,然後查教程說要加上break,後來**就成了下面這個樣子
var num = 2;
switch(num)
寫過若干個switch語句以後,心裡不由產生一種情緒,switch太tm難用了,明明很簡單,非要讓人多寫乙個break;還不如用if來判斷,不知道這是不是很多人都有的想法,反正在之前我是這麼想的。
寫的**越多,就越覺得這太不對勁了,於是在想,如果每個語句都要寫break;那麼解析器直接幫忙寫上就好了,可現實是,解析器並沒有這麼幹。在某乙個瞬間,產生了乙個想法,這個switch肯定還有我所不知道的東西,於是帶著這種心情在網上各種查,終於在某乙個瞬間,找到了一絲曙光。
不知道你有沒有一種感覺哈,寫switch特別難用,當然這是有前提的,那就是你對switch不了解。說它難用不僅僅只是說每次要加break,在if中,我們判斷某個值如果等於2或者3的時候,我們可以下面這樣寫
var num = 3;
if(num===2||num===3)
但如果要你在switch中實現這樣的乙個功能,可能會令你無從下手。
以上都是瞎說——,因為switch是可以實現這些功能的,之所以我們會覺得不能實現是因為它的這種實現方式,太容易讓人誤解了,並且如果你不往那方面去想,很難發現它的用處。
下面是乙個用switch實現的判斷num===2或===3的例子
var num = 2;
switch(num)
輸出如下
這個case是乙個入口,當某個值相匹配時,就會去執行相應的**塊,並且如果沒有加break的話,後面的值不管是否匹配都會被執行直到遇見break將跳出switch語句,而以上的這段**就是利用的這一點,我們在這裡並沒有給2的值加break;因此當值等於2的時候,還會接著往下執行,但在3中有乙個break,因此執行完3就會被跳出。如果值為3則直接執行3**塊,接著跳出。
也就是說,之前我所認為的怪異,它是合理的,只是這些東西,沒有被我所發現。
如果想在switch中實現判斷,諸如1>2,則可以使用下面的這種方式來實現
在switch中做判斷的時候,需要注意一點,它用的是全等===而非==,比如下面這段**
var num = "1";
switch(num)
它並沒有輸出1,因為在switch中預設使用的是全等,因此它不會進行隱式轉換。
如果你想實現隱式轉換,可以用下面這種方式來實現。
var num = "1";
switch(true)
輸出如下
這個true究竟是個什麼...,這是你的第一反應?
之所以會有這種感覺,是因為我們對switch一直都存在著一些誤解,而且這種誤解很深很深,反正我從學程式設計以來就一直沒有理解這個switch,開始是它才過於基礎,導致很多人都不願意去研究它。
為了解開這個switch之謎,我從重對它做一次講解,用**來講把。
switch(x)
其中的x代表某乙個值,而case中的n如果和x一模一樣則會被執行,注意是一模一樣,舉個例子
(x = 5) 5 (n = x==5) true 因為5!==true所以不會被執行
具體**
var num = 5;
switch(num)
又如
var num = 5;
switch(num)
這裡所說的一模一樣就是說的,num這個值和case上的值要一樣,不是單方面的case為true就為true。
而我們上面給switch傳true就是因為這個原因,因為true是個布林值,所以我們才可以用判斷。
其實switch並沒有限制你要傳什麼,它才不管你傳的是false還是陣列,你case上的值只要和它相對應就ok,最後舉個例子
switch(undefined)
輸出undefined。
雖然這篇文章是在講switch,但我覺得它同時也說明了乙個道理.........自己去悟。
JS 基礎篇之帶你走進JavaScript的函式
函式 function 是一段預定義好,並且可以被反覆使用的 塊。1 普通函式 function 函式名 2 帶參函式 function 函式名 引數列表 3 帶返回值的函式 function 函式名 引數列表 js中允許通過乙個變數來接受呼叫函式後的返回值,如var 變數名 函式名 實參列表 1 ...
程序切換之 switch
linux 核心程序切換最重要的乙個部分就是巨集定義switch to,下面從幾個方面來詳細講解一下 1 內嵌彙編 2 memory 破壞描述符 編譯器優化 3 程序切換的標誌是什麼?4 堆疊切換的標誌是什麼?5 為什麼switch to 提供了三個引數?6 彙編引數的傳遞?帶著這幾個問題,先來大體...
走進Emacs Lisp世界之HelloWorld
乙個簡單emacs lisp的helloworld.message helloworld 隨便開個buffer輸入這段內容然後游標定位到右括號最後c x c e 後再emacs下面就可以顯示helloworld了.再看看怎麼定義個函式來顯示helloworld.defun test message ...