1. 程式人生 > >js 中 0 和 null 、"" 的邏輯關係

js 中 0 和 null 、"" 的邏輯關係

在做字串非空判斷時,無意發現一個問題,記錄下以便以後回顧。

問題描述:非空判斷,只是校驗傳值的內容是否為""、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。

也終於解惑了心中疑問。後續工作中就知道這個規則了,就可以避免這個問題的發生了。