在做字符串非空判斷時,無意發現一個問題,記錄下以便以后回顧。
問題描述:非空判斷,只是校驗傳值的內容是否為""、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。
也終於解惑了心中疑問。后續工作中就知道這個規則了,就可以避免這個問題的發生了。