js 中 0 和 null 、"" 的邏輯關係
阿新 • • 發佈:2018-11-25
在做字串非空判斷時,無意發現一個問題,記錄下以便以後回顧。
問題描述:非空判斷,只是校驗傳值的內容是否為""、null 、undefined。當變數 賦值的字串內容為 0,此時做非空校驗竟然返回true,說當前變數值為空。
程式碼如下:
1 //模擬賦值 0 2 var str = "0"; 3 4 /** 5 * 判斷字元是否為空的方法 6 * 為空 返回 true 7 * 不為空返回 false 8 * @param {Object} obj 9 */ 10 function isEmpty(obj){ 11 if(typeof obj == "undefined" || obj == null|| obj == ""){ 12 return true; 13 }else{ 14 return false; 15 } 16 } 17 18 function checkStr(){ 19 //模擬返回內容 20 var msg = "空值,校驗失敗,請檢查校驗內容!"; 21 22 if(isEmpty(str)){ 23 console.log("str 內容為空,返回預設時間問候語!"); 24 return msg; 25 } 26 27 //繼續後續邏輯處理......28 }
在度娘後,檢視W3C ,解釋參考地址:http://www.w3school.com.cn/js/js_obj_boolean.asp
有這麼一段話:(ps:摘自 http://www.w3school.com.cn/js/js_obj_boolean.asp JavaScript Boolean(邏輯)物件 文章)
1 註釋:如果邏輯物件無初始值或者其值為 0、-0、null、""、false、undefined 或者 NaN,那麼物件的值為 false。否則,其值為 true(即使當自變數為字串 "false" 時)!
下面的所有的程式碼行均會建立初始值為 false 的 Boolean 物件。
那就能解釋的通了,當變數賦值 為0 則 在Boolean 值中就是false,
因為 undefined、null、"" 在Boolean 值中就也是false,所以在if 邏輯判斷 時 就變成了 if(false == false) ,結果 必然就是返回 true。
也終於解惑了心中疑問。後續工作中就知道這個規則了,就可以避免這個問題的發生了。