1. 程式人生 > >淺談js“三元表示式” (三元運算子)

淺談js“三元表示式” (三元運算子)

前言

各位大神,大家好,相約週三。我們又見面了。
眾所周知,三元表示式在程式碼量上比if…else語句更簡潔一些。但是博主在可讀性上更加偏向於if…else語句。三元表示式不僅在js中使用,在很多後臺程式語言,比如java、php中都有使用,不過在js中對於三元表示式的要求貌似要鬆很多。廢話不多說。下面一起看看三元表示式。

三元表示式

素質N連問

首先 為什麼叫三元表示式?
顧名思義,有三個元素組成的表示式。

哪三個元素呢?
“條件”“真結果”“假結果”。

三元表示式的基本格式是什麼呢?
條件?真結果:假結果

三元表示式是如何對應if…else語句的?
條件 ? 真結果 : 假結果
if(條件){真結果}else{假結果}

我們來看一下官方的解釋。W3C把“三元表示式”叫做”ECMAScript 條件運算子”這裡寫圖片描述
誒!中間為什麼空了一塊呢?
我給它補上:
boolean_expression ? true_value : false_value
這行程式碼的意思官方也給了具體的說明,這裡不再贅述。

三元表示式結果執行多行程式碼表達:

大家也看到了,在官方的w3c文件中,給的只有一條結果執行語句,但是博主之前說過,至少在js中,三元表示式和if…else語句是可以相互替換的。
那麼既然if…else語句都可以在結果執行時寫多行程式碼,三元表示式為什麼不行呢?
其實是可以的。

        <script
>
var a=''; var b=''; var age=prompt("Input your age:"); age>18 ? (a='成年人',b='18歲以上') : (a='未成年人',b='18歲以下'); alert(a); alert(b); </script>

這下看明白了嗎?只要在結果中多條語句之間加上“,”就可以了。

三元表示式在for迴圈中的運用

<script>
        var a='';
        var
b=''; for(var i=0;i<4;i++){ i>2 ? (a='成年人',b='18歲以上') : (a='未成年人',b='18歲以下'); alert(a); alert(b); }
</script>

以上程式碼列印三次 ‘成年人’,’18歲以上’ 一次‘ 成年人’,‘18歲以下’。

三元表示式的巢狀
if…else語句可以巢狀多層,那想必三元表示式也可以進行巢狀吧!沒錯,三元表示式可以進行巢狀,而且理論上可以無限巢狀下去。為什麼說理論上?因為暫時沒有見過有人巢狀過多行三元表示式。首先不利於程式碼的閱讀,其次對於邏輯能力不強的人來說,確實是一種腦力的摧殘!大家自行感受一下。

        <script>
        var a='';
        var b='';
        var age=prompt("Input your age:");
            age<18 ?  (a='兒童',b='18歲以下'):( age>50 && age<80 ? (a='老年人',b='50歲以上') : (age>=80 ? (a='長壽者',b='80歲以上'):(a='你的年齡是以下兩種',b='18、50')));
            alert(a);
            alert(b);
        </script>

其實這塊程式碼看起來感覺還不是很明顯,但是博主在除錯過程中已經有點暈了,特別是在最後三個括號那裡,糾結了!

所以歸納一下三元表示式的巢狀:
條件1 ? 真結果1:( 條件1.1 真結果1.1 : (條件1.1.1 ? 真結果1.1.1:假結果1.1.1))
是不是眼睛都看花了?

三元表示式的侷限性
最後,大家注意,三元表示式在使用過程中不能使用break,continue等語句。否則…
這裡寫圖片描述

最最後謝謝各位大神賞臉閱讀鄙人拙劣的部落格。撰寫不恰當之處還希望各位大佬指出共同學習。