javascript中判断变量是否存在的正确方式

在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;
}
原文地址:https://www.cnblogs.com/DHclly/p/9782328.html