你可曾見過如此簡單粗暴的JavaScript解說 -- if 判斷的正確打開方式?

在JavaScript中,對于 if else 的邏輯判斷你肯定非常熟悉,本文羅列了幾種你不一定知道的簡寫方式,僅供參考。

例子:
已知小明考了68分,小于60分為不及格,大于60分為及格,問:小明是否通過了考試?

1.傳統的寫法

if(score < 60){
    alert('不及格');
}else{
    alert('及格');
}

這沒什么好說的,最基本的if else語法。可讀性應該是最好的。

2.利用三目運算符來進行判斷

score < 60 ? alert('不及格') : alert('及格') ;

這種寫法應該還算是比較多見的,而且,如果只有單純的一個if判斷的話,可讀性也不是很差。

3.利用&& 來判斷

score < 60 && alert('不及格') ;
score >= 60 && alert('及格') ;

**&&的用法 **: 如果左邊的結果為真,那么運行右邊的表達式,如果右邊的也為真,那么就返回真。其中,只要有一個為假,結果就是假。并且,一旦左邊的結果為假,右邊的就不執行了。

這里就是取了一個巧,因為我只是想要執行右邊的表達式,無所謂返回值是什么。

那么,如果score < 60 為真,我不管三七二十一,都去執行一下右邊的代碼。我們的目的已經達到了。

這不就相當于這樣嗎:

if(score < 60 == true){
   alert('不及格') ;
}

if(score >= 60 == true){
   alert('及格') ;
}

簡寫:

if(score < 60){
   alert('不及格') ;
}

if(score >= 60){
   alert('及格') ;
}

就是說,一旦 ( ) 里面的表達式為真,就執行 { } 里面的內容。否則就不執行。

4.利用 || 來判斷

score < 60  ||  alert('及格') ;
score >= 60  ||  alert('不及格') ;

**|| 的用法 **: 如果左邊的結果為真,那么直接返回true,右邊的就忽略了!

如果左邊為假,那么就運行右邊的,看看右邊的結果如何?如果右邊為真,就返回真,否則返回假。

也就是說,不管右邊的結果怎樣,只要左邊為假了,右邊就無論如何會被執行一次的。這邊也就是利用這個原理,相當于這樣:

if(score < 60 == false){
   alert('及格') ;
}

if(score >= 60 == false){
   alert('不及格') ;
}

如果分數 < 60 是假的,是騙你的,不就是說分數 > 60 才是真相嗎?哦,超過60分就是及格了,所以alert出來的是及格。

如果分數 >= 60 是假的,是騙你的,不就是說分數 < 60 才是真相嗎?哦,不滿60分就是不及格了,所以alert出來的是不及格。

這樣應該說的比較清楚了吧。

再說得白一點,就是:
你要么給我 < 60 ,要么給我 alert('及格') ;
你要么給我 >= 60 ,要么給我 alert('不及格') ;

5.實戰演練

我們來一個小案例,看看可以怎么運用這些知識點?

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
        <style type="text/css">
            .box1 {
                height:200px;
                width:300px;
                border: 1px solid #666;
            }
            
            .box2 {
                background: green;
            }
            
        </style>
        <script>
            
        </script>
    </head>
    <body>
        <div id='myBox' class='box1'></div>
    </body>
</html>

Paste_Image.png

我們引入了jQuery,現在希望自己來編寫一個toggelClass,如何實現呢?

當我們點擊這個div的時候,就自動將class換成box2。再次點擊的時候,就把box2的樣式去掉,依此循環。

上代碼:

$('document').ready(function(){
    function toggleClass(dom , className){
        //判斷該class是否已經存在
        if(dom.hasClass(className)){
            //如果存在,就去掉這個class
            dom.removeClass(className);
        }else{
            //如果不存在,就加上這個class
            dom.addClass(className);
        }
    }
    
    $('#myBox').click(function(){
        toggleClass($(this),'box2');
    });
});
1.gif

我猜想,jQuery對toggleClass的實現應該也差不多是這個意思。現在,我們考慮做如下簡化:

第一種方式,用三目運算符簡化:

function toggleClass(dom , className){
    dom.hasClass(className) ? dom.removeClass(className) : dom.addClass(className);
}

第二種方式,用&& 和 ||:

!dom.hasClass(className) && dom.addClass(className) || dom.removeClass(className);

可能有點繞,而且我也不是很推薦這種方式,一般來說,這種方式用于一些給變量賦值的場合。

我大概解釋一下:

!dom.hasClass(className) && dom.addClass(className) 

這表示如果dom元素不包含你指定的className,那么 !dom.hasClass(className) 是真,于是無論如何我都要執行右邊的代碼: dom.addClass(className) ,也就是說,給dom元素添加這個class。

這樣一來,

!dom.hasClass(className) && dom.addClass(className) 

這句話是不是已經成立了,OK,那么因為右邊是 || , 左邊都已經成立了,那么我右邊的代碼是不是可以不執行了呀?

好的,第二次點擊:

!dom.hasClass(className)的意思是說,你這個dom元素是不是沒有指定的class啊,不,我們剛才已經添加了,所以是有的。

那么,這句話就不成立了,&& 左邊的是假,那么右邊的就不執行了、

就是說:

 dom.addClass(className) 

這句話不執行了。

綜合來看:

!dom.hasClass(className) && dom.addClass(className) 

這個條件就是不成立的。

好的, || 左邊的不成立,是不是說,我們無論如何都要執行一下||右邊的代碼呢?

恩, dom.removeClass(className) 就被執行了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 27,579評論 1 45
  • 概要 64學時 3.5學分 章節安排 電子商務網站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,273評論 0 3
  • 今天發現了一個極其善良的人。我望了望健身房上面標的天文數字,3680塊1年,我的心很涼。在我將要走的時候來了一個經...
    林江雪閱讀 402評論 0 0
  • 早在兩千多年前的戰國時代,著名思想家孟子就提倡"老吾老以及人之老,幼吾幼以及人之幼"的博愛思想。 博愛,就是...
    言行合一閱讀 1,239評論 1 2
  • 你知道為什么你的學習效率這么低嗎?因為你不會“用腦”。這不是笑話,這是真的。 最近在看《慢思考-大腦超載時代的思考...
    弘丹閱讀 11,752評論 107 533