js 中 0 和 null 、"" Boolean 值關系


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

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM