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。

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

相關推薦

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

jsundefinednull的區別

常常 html exist tex 輸出 output 為什麽 hive 存在 轉自:http://www.cnblogs.com/eastday/archive/2010/03/03/1677324.html 在JavaScript中存在這樣兩種原始類型:Null與Und

【知識筆記】jsundefinednull的區別聯絡

在JavaScript中存在這樣兩種原始型別:Null與Undefined。這兩種型別常常會使JavaScript的開發人員產生疑惑,在什麼時候是Null,什麼時候又是Undefined?Undefined型別只有一個值,即undefined。當宣告的變數還未被初始化時,變數的預設值為undefined。Nu

JS undefinednull的區別

在JavaScript中存在這樣兩種原始型別:Null與Undefined。這兩種型別常常會使JavaScript的開發人員產生疑惑,在什麼時候是Null,什麼時候又是Undefined? Undefined型別只有一個值,即undefined。當宣告的變數還未被初始化

區分JS的undefined,null,"",0false

今天有同事問我一個Js 問題,if (0 == ‘’) 是true 很不理解,單獨做了一下測試,記錄於此。 <script> alert(0 == ''); //true alert(0 == false); //true alert(f

【2017-05-21】WebForm跨頁面傳值取值C#服務端跳轉頁面 Button的OnClientClick屬性JsgetAttribute超鏈接點擊彈出警示框。

代碼 height delet update size 內存 客戶 bar win 一、跨頁面傳值和取值: 1、QueryString - url傳值,地址傳值 優缺點:不占用服務器內存;保密性差,傳遞長度有限。 通過跳轉頁面路徑進行傳值,方式: href="地址?ke

angular4.0angularJSreact.jsvue.js的簡單比較

width 文檔 個人 過程 處理 特性 很好 單頁應用 兼容 angularJS特性 模板功能強大豐富(數據綁定大大減少了代碼量) 比較完善的前端MVC框架(只要學習這個框架,按照規定往裏面填東西就可以完成前端幾乎所有的的問題) 引入了Java的一些概念 angu

php0,空,nullfalse的區別【簡記】

種類型 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基礎-資料型別-nullundefinedboolean

null和undefined 兩者都表示“沒有”,但仍有區別,null突出變數的值是不存在的,undefined突出變數沒有被定義。 一般情況下,判斷物件是否包含某個屬性的時候都會用到undefine

js的return false event.preventDefault()event.stopPropagation()

原文地址:https://www.cnblogs.com/momo798/p/6025777.html 作用:阻止瀏覽器預設行為。 事件處理程式的返回值只對通過屬性註冊的處理程式才有意義,如果我們未通過addEventListener()函式來繫結事件的話,若要禁止預設事件,用的就是retu

mybatis0null的問題

<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的屬性,這個屬性指向函式的原型物件。

JSisPrototypeOf hasOwnProperty 的區別

另一個 strong 是否 指定 不同 名稱 功能 成員 eof 1、isPrototypeOf isPrototypeOf是用來判斷指定對象object1是否存在於另一個對象object2的原型鏈中,是則返回true,否則返回false。 格式如下: object1.is

jseval()$.parseJSON()的區別

16px 異常 comment 而不是 str on() ajax 鏈接 強制 之前自己一直對ajax不是特別的熟悉,所以一般都很少用這個去寫功能,但是最近這個項目中用到了,用ajax異步傳數據,json傳數據這個時候就需要去解析傳過來的數據了,eval()和$.parse

Jscallercallee的區別

存在 ons var nbsp fun 區別 test 函數對象 返回 1 :caller 返回一個調用當前函數的引用 如果是由頂層調用的話 則返回null (舉個栗子哈 caller給你打電話的人 誰給你打電話了 誰調用了你 很顯然是下面a函數的執行 只有在打電話的時候

jQueryfocusin()focus()find()children()的差別

nes jquery ams rip 1.4 fadein ++ display his jQuery中focus()和focusin()、focus()和children()的差別 focus()和focusin() focus()和focusin