js的null和undefined的區別(三)
問題解決:
先來解決上篇部落格郵寄地址出現0的問題
原因:可以看到null+null=0
郵寄地址拼接的省市縣和詳細地址,沒有做判空處理,出現了null+null的情況。
var address = data.invoiceProvince+data.invoiceCity+data.invoiceCounty+data.invoiceDetailaddress;
這個問題解決了,但是下個問題又來了,為什麼省市縣的取值出現了null,什麼情況下是null
js獲取java資料為null和undefined情況:
mysql中的空白值和null
Mysql |
Java |
JS |
備註 |
空白值 |
‘’ |
‘’ |
不區分接收資料的型別,永遠都存在對應的屬性,只要sql查詢了這個欄位 |
Null |
Map接受,map中沒有對應欄位的key-value |
從map獲取對應的值為undefined |
|
實體物件接受,對應的屬性值是null |
從實體物件獲取具體為null還是undefined不確定?(疑惑1) |
||
實體物件接收,但是中間經過map處理,map中仍然存在對應的屬性值 |
從map的物件獲取具體為null還是undefined不確定?(疑惑2) |
||
sql語句不查詢這個欄位的時,採用實體物件接收,對應屬性值不知道是否還存在 |
從實體物件獲取具體為null還是undefined不確定?(疑惑3) |
sql語句不查詢這個欄位,採用實體接收 |
java程式碼訪問mysql資料庫。
mysql中的預設的null值,在實體中返回時是以 null 返回的。在map中不存在這個欄位。
這一步檢驗有時候會在java程式碼檢驗返回值是否為空時候用到。可能會報java.lang.NullPointerException
null和undefined比較:
第一種:出現
undefined表示"缺少值",就是此處應該有一個值,但是還沒有定義。典型用法:
①物件沒有賦值的屬性,該屬性的值為undefined。
②變數被聲明瞭,但沒有賦值時,就等於undefined。
③呼叫函式時,應該提供的引數沒有提供,該引數等於undefined。
④函式沒有返回值時,預設返回undefined。
第一種情況:在我們-s獲取java資料為null和undefined情況,已經說明。
第二種情況:
function f(x){console.log(x)}
f() // undefined
第四種情況:
var x = f();
x // undefined
第二種:轉換為數字的時候
null是一個表示"無"的物件,轉為數值時為0;null和任何數字相加(包括null)都等於0。
undefined是一個表示"無"的原始值,NaN(Nota Number)。undefiend和任何數字相加(包括undefined和null)都是NaN
區別總結:
①undefined是定義了但是沒有賦值或者物件屬性沒有定義,null是賦值的時候就是沒有值。
②undefiend和任何數字相加是NaN,null和任何數字相加是0;
下一篇部落格:NaN的產生