conditionA = ""
if( conditionA ) {
console.log("hello");
}
//無解果 undefined
conditionB = "hello"
if(conditionB) {
console.log("hello");
}
//結果:VM294:3 hello
思考:
在條件判斷中,為什麼 conditionA 不會通過條件判斷?
在條件判斷式中,我們需要得到一個 true 或 false,才能去判斷接下來要不要執行裡面的程式,但如果裡面不是一個單純的比較,是一個物件或者其他東西,會發生什麼事情?
從 JS 的強制轉型講起,看以下程式碼
var a = 42;
var b = a + ""; //隱含的強制轉型
var c = String( a ); //明確的強制轉型
console.log(b)
console.log(c)
//b結果: 42
//c結果: 42
當我們的操作不符合正常狀況時, JS 語言會幫我們進一步處理,回到我們條件判斷,我們應該餵予一個 Boolean 值,或一個得出 Boolean 值的比較,但如果是其他的東西, JS 會幫我們進行強制轉型,而要變為 Boolean 的 true 或 false 就是用所謂的 Truthy 值或 Falsy 值去判斷。那我們現在給的東西是哪一種值呢?
最上面的例子,其實常常用在判斷是否為空值時的判斷,我們也可以寫成以下,去判斷資料是否為空。
conditionA = ""
if( !conditionA ) {
console.log("目前沒有值");
}
另外,使用三元運算式,將我們原本的程式改寫成更簡潔的狀態。
語法:
判斷式 ? 如果符合 : 如果不符合
以下改寫:
conditionA = ""
!conditionA ? console.log("目前沒有值") : console.log(conditionA)
//結果:目前沒有值
conditionA = "Hello"
!conditionA ? console.log("目前沒有值") : console.log(conditionA)
//結果:hello