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。
也終於解惑了心中疑問。後續工作中就知道這個規則了,就可以避免這個問題的發生了。
相關推薦
js 中 0 和 null 、"" 的邏輯關係
在做字串非空判斷時,無意發現一個問題,記錄下以便以後回顧。 問題描述:非空判斷,只是校驗傳值的內容是否為""、null 、undefined。當變數 賦值的字串內容為 0,此時做非空校驗竟然返回true,說當前變數值為空。 程式碼如下: 1 //模擬賦值 0 2 var str = "0";
js 中 0 和 null 、"" 的邏輯關係
在做字串非空判斷時,無意發現一個問題,記錄下以便以後回顧。 問題描述:非空判斷,只是校驗傳值的內容是否為""、null 、undefined。當變數 賦值的字串內容為 0,此時做非空校驗竟然返回true,說當前變數值為空。 程式碼如下: 1 //模擬賦值 0 2 var str = "0"; 3
js中undefined和null的區別
常常 html exist tex 輸出 output 為什麽 hive 存在 轉自:http://www.cnblogs.com/eastday/archive/2010/03/03/1677324.html 在JavaScript中存在這樣兩種原始類型:Null與Und
【知識筆記】js中undefined和null的區別和聯絡
在JavaScript中存在這樣兩種原始型別:Null與Undefined。這兩種型別常常會使JavaScript的開發人員產生疑惑,在什麼時候是Null,什麼時候又是Undefined?Undefined型別只有一個值,即undefined。當宣告的變數還未被初始化時,變數的預設值為undefined。Nu
JS 中undefined和null的區別
在JavaScript中存在這樣兩種原始型別:Null與Undefined。這兩種型別常常會使JavaScript的開發人員產生疑惑,在什麼時候是Null,什麼時候又是Undefined? Undefined型別只有一個值,即undefined。當宣告的變數還未被初始化
區分JS中的undefined,null,"",0和false
今天有同事問我一個Js 問題,if (0 == ‘’) 是true 很不理解,單獨做了一下測試,記錄於此。 <script> alert(0 == ''); //true alert(0 == false); //true alert(f
【2017-05-21】WebForm跨頁面傳值取值、C#服務端跳轉頁面、 Button的OnClientClick屬性、Js中getAttribute和超鏈接點擊彈出警示框。
代碼 height delet update size 內存 客戶 bar win 一、跨頁面傳值和取值: 1、QueryString - url傳值,地址傳值 優缺點:不占用服務器內存;保密性差,傳遞長度有限。 通過跳轉頁面路徑進行傳值,方式: href="地址?ke
angular4.0和angularJS、react.js、vue.js的簡單比較
width 文檔 個人 過程 處理 特性 很好 單頁應用 兼容 angularJS特性 模板功能強大豐富(數據綁定大大減少了代碼量) 比較完善的前端MVC框架(只要學習這個框架,按照規定往裏面填東西就可以完成前端幾乎所有的的問題) 引入了Java的一些概念 angu
php中0,空,null和false的區別【簡記】
種類型 sse ole string類 tar pty 字符 底層 is_null 1 $a = 0; 2 $b="0"; 3 $c= ‘‘; 4 $d= null; 5 $e = false; 6 7 echo "5個變量-原始
學習:JS中陣列和物件的之間的關聯、區別
在jscript中陣列和物件幾乎相同,兩者主要的差別是物件沒有自動長度屬性,而陣列沒有物件的屬性和方法。 陣列定址 使用方括號"[]"來定址陣列。方括號中是一個數值或一個值為整數的表示式。 將物件作為關聯陣列 通常,使用點運算子“.”訪問物件的屬性。例如, myOb
JS基礎-資料型別-null、undefined和boolean
null和undefined 兩者都表示“沒有”,但仍有區別,null突出變數的值是不存在的,undefined突出變數沒有被定義。 一般情況下,判斷物件是否包含某個屬性的時候都會用到undefine
js中的return false 、event.preventDefault()和event.stopPropagation()
原文地址:https://www.cnblogs.com/momo798/p/6025777.html 作用:阻止瀏覽器預設行為。 事件處理程式的返回值只對通過屬性註冊的處理程式才有意義,如果我們未通過addEventListener()函式來繫結事件的話,若要禁止預設事件,用的就是retu
mybatis中的0和null的問題
<if test="status != null and status != ''">and isDel=0 </if>當 private Integer status=0 時,會有什麼問題?此時判斷返回的是false,不會執行if裡面的語句分析如下
Js中__proto__和prototype的區別和關係
在知乎上看到了一篇寫得還挺好的文章,能夠很好的說明這兩者之間的關係,之前一直也有關注這方面的知識,但是如果重新複習一遍的話,時間久了之後就會忘記,所以前端還是需要經常複習,經常使用,經常理解。 首先,要明確幾個點: 1.在JS裡,萬物都是物件,方法(Function)是物件
js中的call()方法、apply()和bind()方法的區別以及使用場景
在js中,所有的函式再被呼叫的時候都會預設傳入兩個引數,一個是this,還有一個是arguments。在預設情況下this都是指當前的呼叫函式的物件。但是有時候我們需要改變this的指向,也就是說使函式可以被其他物件來呼叫,那麼我們應該怎樣做呢?這時候我們就可以使用call,apply和bi
js中__proto__和prototype的區別和關係?
正好這段時間在重新看這部分,寫一篇回答來梳理一下吧。 proto(隱式原型)與prototype(顯式原型) 1.是什麼顯式原型 explicit prototype property:每一個函式在建立之後都會擁有一個名為prototype的屬性,這個屬性指向函式的原型物件。
JS中isPrototypeOf 和hasOwnProperty 的區別
另一個 strong 是否 指定 不同 名稱 功能 成員 eof 1、isPrototypeOf isPrototypeOf是用來判斷指定對象object1是否存在於另一個對象object2的原型鏈中,是則返回true,否則返回false。 格式如下: object1.is
js中eval()和$.parseJSON()的區別
16px 異常 comment 而不是 str on() ajax 鏈接 強制 之前自己一直對ajax不是特別的熟悉,所以一般都很少用這個去寫功能,但是最近這個項目中用到了,用ajax異步傳數據,json傳數據這個時候就需要去解析傳過來的數據了,eval()和$.parse
Js中caller和callee的區別
存在 ons var nbsp fun 區別 test 函數對象 返回 1 :caller 返回一個調用當前函數的引用 如果是由頂層調用的話 則返回null (舉個栗子哈 caller給你打電話的人 誰給你打電話了 誰調用了你 很顯然是下面a函數的執行 只有在打電話的時候
jQuery中focusin()和focus()、find()和children()的差別
nes jquery ams rip 1.4 fadein ++ display his jQuery中focus()和focusin()、focus()和children()的差別 focus()和focusin() focus()和focusin