你可曾見過(guò)如此簡(jiǎn)單粗暴的JavaScript解說(shuō) -- if 判斷的正確打開方式?

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

例子:
已知小明考了68分,小于60分為不及格,大于60分為及格,問(wèn):小明是否通過(guò)了考試?

1.傳統(tǒng)的寫法

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

這沒什么好說(shuō)的,最基本的if else語(yǔ)法??勺x性應(yīng)該是最好的。

2.利用三目運(yùn)算符來(lái)進(jìn)行判斷

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

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

3.利用&& 來(lái)判斷

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

**&&的用法 **: 如果左邊的結(jié)果為真,那么運(yùn)行右邊的表達(dá)式,如果右邊的也為真,那么就返回真。其中,只要有一個(gè)為假,結(jié)果就是假。并且,一旦左邊的結(jié)果為假,右邊的就不執(zhí)行了。

這里就是取了一個(gè)巧,因?yàn)槲抑皇窍胍獔?zhí)行右邊的表達(dá)式,無(wú)所謂返回值是什么。

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

這不就相當(dāng)于這樣嗎:

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

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

簡(jiǎn)寫:

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

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

就是說(shuō),一旦 ( ) 里面的表達(dá)式為真,就執(zhí)行 { } 里面的內(nèi)容。否則就不執(zhí)行。

4.利用 || 來(lái)判斷

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

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

如果左邊為假,那么就運(yùn)行右邊的,看看右邊的結(jié)果如何?如果右邊為真,就返回真,否則返回假。

也就是說(shuō),不管右邊的結(jié)果怎樣,只要左邊為假了,右邊就無(wú)論如何會(huì)被執(zhí)行一次的。這邊也就是利用這個(gè)原理,相當(dāng)于這樣:

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

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

如果分?jǐn)?shù) < 60 是假的,是騙你的,不就是說(shuō)分?jǐn)?shù) > 60 才是真相嗎?哦,超過(guò)60分就是及格了,所以alert出來(lái)的是及格。

如果分?jǐn)?shù) >= 60 是假的,是騙你的,不就是說(shuō)分?jǐn)?shù) < 60 才是真相嗎?哦,不滿60分就是不及格了,所以alert出來(lái)的是不及格。

這樣應(yīng)該說(shuō)的比較清楚了吧。

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

5.實(shí)戰(zhàn)演練

我們來(lái)一個(gè)小案例,看看可以怎么運(yùn)用這些知識(shí)點(diǎn)?

<!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,現(xiàn)在希望自己來(lái)編寫一個(gè)toggelClass,如何實(shí)現(xiàn)呢?

當(dāng)我們點(diǎn)擊這個(gè)div的時(shí)候,就自動(dòng)將class換成box2。再次點(diǎn)擊的時(shí)候,就把box2的樣式去掉,依此循環(huán)。

上代碼:

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

我猜想,jQuery對(duì)toggleClass的實(shí)現(xiàn)應(yīng)該也差不多是這個(gè)意思?,F(xiàn)在,我們考慮做如下簡(jiǎn)化:

第一種方式,用三目運(yùn)算符簡(jiǎn)化:

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

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

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

可能有點(diǎn)繞,而且我也不是很推薦這種方式,一般來(lái)說(shuō),這種方式用于一些給變量賦值的場(chǎng)合。

我大概解釋一下:

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

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

這樣一來(lái),

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

這句話是不是已經(jīng)成立了,OK,那么因?yàn)橛疫吺?|| , 左邊都已經(jīng)成立了,那么我右邊的代碼是不是可以不執(zhí)行了呀?

好的,第二次點(diǎn)擊:

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

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

就是說(shuō):

 dom.addClass(className) 

這句話不執(zhí)行了。

綜合來(lái)看:

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

這個(gè)條件就是不成立的。

好的, || 左邊的不成立,是不是說(shuō),我們無(wú)論如何都要執(zhí)行一下||右邊的代碼呢?

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,817評(píng)論 1 45
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,851評(píng)論 0 3
  • 今天發(fā)現(xiàn)了一個(gè)極其善良的人。我望了望健身房上面標(biāo)的天文數(shù)字,3680塊1年,我的心很涼。在我將要走的時(shí)候來(lái)了一個(gè)經(jīng)...
    林江雪閱讀 440評(píng)論 0 0
  • 早在兩千多年前的戰(zhàn)國(guó)時(shí)代,著名思想家孟子就提倡"老吾老以及人之老,幼吾幼以及人之幼"的博愛思想。 博愛,就是...
    言行合一閱讀 1,297評(píng)論 1 2
  • 你知道為什么你的學(xué)習(xí)效率這么低嗎?因?yàn)槟悴粫?huì)“用腦”。這不是笑話,這是真的。 最近在看《慢思考-大腦超載時(shí)代的思考...
    弘丹閱讀 11,831評(píng)論 107 533

友情鏈接更多精彩內(nèi)容