在Javascript中,我們通常判斷一個變量是否存在(即不為null
或者undefined
),往往是這樣判斷的
if(tomy){
console.log(obj.name);
}
這種寫法在大部分情況下都沒問題,但是在有的情況下就會很坑,比如:
空字符串
if(tomy.address){//tomy.address=''
console.log(tomy.address);
}else{
console.log("the obj tomy need address property");
}
我們的本意是判斷tomy是否有address
這個屬性,結果是有address
屬性的,只是值為'’
(啥都沒有,空字符串),結果就被js引擎解析為布爾值false
,和本意不符。
數字0
var config={};
if(minValue){//minValue=0;
config.minValue=minValue;
}
我們的本意是判斷是否傳了minValue,如果有就賦值,結果是有傳minValue
屬性的,只是值為0
,結果就被js引擎解析為布爾值false
,變成了沒有傳minValue
這個屬性。和本意不符。
布爾值
if(tomy.canWork){//tomy.canWork=false;
//do work
}
我們的本意是判斷tomy是否有canWork
這個屬性,結果是有canWork
屬性的,只是值為false
,結果就會和本意不符。
結論
因此我們要判斷一個變量是否存在,應該這樣寫才是比較好的,也方便后期維護。
//封裝為一個方法
const isNullOrUndefined=obj=>obj===null || obj === undefined;
var config={};
if(!isNullOrUndefined(minValue)){
config.minValue=minValue;
}