布林的自動轉型跟falsy(偽值)與truthy(真值)有關,只要會分辨falsy與truthy,那布林的隱性轉型也是很好判斷的。
下面的表為各型別資料在布林裡為真值或偽值
型別 | truthy | falsy |
---|---|---|
boolean | ture | false |
Array | 一律為truth即使為空字串 | X |
Object | 一律為truth即使為空物件 | X |
string | ""空字串 | "0"非空字串(只有字串內有東西) |
number | 除了0與NaN以外的數字皆為truthy | +0 -0 0與NaN |
undefined | X | 一律為falsy |
null | X | 一律為falsy |
了解上面的表之後就來看一些布林的隱性(implicit)轉型範例吧
if(2){
console.log('我執行了')
}
else{console.log('我沒執行')}
//我執行了
console.log('' || 123)//123
console.log(!'' || 123)//true
來解析一下上面的程式碼
1.if判斷式內只能為true或是false,2兩者都不是所以自動轉型,又因為2為truthy所以自動轉型為ture。
2.''為falsy在邏輯運算子中自動轉型為false,在||的左側如果為false則執行右側所以執行123
3.''為falsy在邏輯運算子中自動轉型為false,但是有!所以false倒轉為true,在||的左側如果為true則執行左側所以執行!'',然後!''為true。
直接看顯性(explicit)轉型的範例
console.log(Boolean(''),typeof(Boolean('')))//false boolean
console.log(Boolean('123'),typeof(Boolean('132')))//true boolean
console.log(Boolean([]),typeof(Boolean([])))//true boolean
console.log(Boolean({}),typeof(Boolean({})))//true boolean
console.log(Boolean(undefined),typeof(Boolean(undefined)))//false boolean
console.log(Boolean(null),typeof(Boolean(null)))//false boolean
從上面的範例發現到只要判斷各型別資料在布林裡為真值或偽值就可以知道被轉型為true或是false
那個時候是2018年10月,自從7月份離職之後就往台中陸續面試了2家生技公司,嗯...又是生技公司,結果都是以英文太差被打槍,最後痛定思痛決定考個多益來證明自己,再準備半年左右考到710分,這下總算能找到工作的吧,於是就繼續投履歷,再經過一個月沒有回應的等待,終於有了面試機會,不過這也開啟以後都不想再進入生技業的起頭,面試的時候一樣都談得好好的,最後談薪水的時候被PUA,我的印象很深刻,是這樣子的在面試結束的兩周之後收到錄取通知,與我面試的主管以他認為無法拒絕的薪水31000扣完勞健保不到30k,並說了一句到我們這邊來一切從頭開始,包含資歷,為什麼我會答應呢?...嗯我又沒錢了。這次我看到這家公司不能久待的第一點。