如何在JavaScript中检查空值?我写了下面的代码,但没用。

if (pass == null || cpass == null || email == null || cemail == null || user == null) {      

    alert("fill all columns");
    return false;  

}   

如何在JavaScript程序中查找错误?


当前回答

你可以使用try-catch finally

 try {
     document.getElementById("mydiv").innerHTML = 'Success' //assuming "mydiv" is undefined
 } catch (e) {

     if (e.name.toString() == "TypeError") //evals to true in this case
     //do something

 } finally {}   

您也可以抛出自己的错误。看看这个。

其他回答

JAVASCRIPT中的AFAIK当变量已声明但未赋值时,其类型未定义。所以我们可以检查变量,即使它是一个持有某个实例代替值的对象。

创建一个用于检查返回true的无效性的助手方法,并在API中使用它。

检查变量是否为空的helper函数:

function isEmpty(item){
    if(item){
        return false;
    }else{
        return true;
    }
}

尝试捕获异常API调用:

try {

    var pass, cpass, email, cemail, user; // only declared but contains nothing.

    // parametrs checking
    if(isEmpty(pass) || isEmpty(cpass) || isEmpty(email) || isEmpty(cemail) || isEmpty(user)){
        console.log("One or More of these parameter contains no vlaue. [pass] and-or [cpass] and-or [email] and-or [cemail] and-or [user]");
    }else{
        // do stuff
    }

} catch (e) {
    if (e instanceof ReferenceError) {
        console.log(e.message); // debugging purpose
        return true;
    } else {
        console.log(e.message); // debugging purpose
        return true;
    }
}

一些测试用例:

var item = ""; // isEmpty? true
var item = " "; // isEmpty? false
var item; // isEmpty? true
var item = 0; // isEmpty? true
var item = 1; // isEmpty? false
var item = "AAAAA"; // isEmpty? false
var item = NaN; // isEmpty? true
var item = null; // isEmpty? true
var item = undefined; // isEmpty? true

console.log("isEmpty? "+isEmpty(item));

我做了一个非常简单的功能,效果很好:

function safeOrZero(route) {
  try {
    Function(`return (${route})`)();
  } catch (error) {
    return 0;
  }
  return Function(`return (${route})`)();
}

路线是任何一条价值链都会爆炸。我将它用于jQuery/cacherio和对象等。

示例1:一个简单的对象,例如this const testObj={items:[{val:'haya'},{val:null},{val:'hum!'}];};。

但它可能是一个非常大的物体,我们甚至没有制造过。所以我通过了:

let value1 = testobj.items[2].val;  // "hum!"
let value2 = testobj.items[3].val;  // Uncaught TypeError: Cannot read property 'val' of undefined

let svalue1 = safeOrZero(`testobj.items[2].val`)  // "hum!"
let svalue2 = safeOrZero(`testobj.items[3].val`)  // 0

当然,如果您愿意,可以使用null或“无值”。。。任何适合您需要的。

通常,如果找不到DOM查询或jQuery选择器,可能会抛出错误。但使用类似于:

const bookLink = safeOrZero($('span.guidebook > a')[0].href);
if(bookLink){
  [...]
}

我找到了另一种方法来测试该值是否为空:

if(variable >= 0 && typeof variable === "object")

null同时充当数字和对象。比较null>=0或null<=0结果为true。比较null==0或null>0或null<0将导致false。但由于null也是一个对象,我们可以将其检测为null。

我做了一个更复杂的函数性质,它比typeof做得更好,并且可以被告知要包含或保持分组的类型

/*函数性质of(变量,[包含类型])包括的类型有null-null将导致“未定义”,如果包含,则将导致“null”NaN-NaN将导致“未定义”,或如果包含,将导致“NaN”-infinity-将负-无穷与“无限”分开number-将数字拆分为“int”或“double”array-将“array”与“object”分开空-空的“字符串”将导致“空”或空=未定义-空“字符串”将导致“未定义”*/函数性质of(v,…类型){/*null*/if(v===null)返回类型。includes('null')?“null”:“未定义”;/*NaN*/if(typeof v==“number”)返回(isNaN(v))?类型。包括('NaN')?“NaN”:“未定义”:/*-无穷大*/(v+1===v)?(types.includes('-infinity')&&v==Number.NEGATIVE_infinity)?“-无限”:“无限”:/*number*/(types.includes('number'))?(数字.isInteger(v))?“int”:“double”:“number”;/*array*/if(typeof v==“object”)return(types.includes('array')&&array.isArray(v))?“array”:“object”;/*空*/if(typeof v==“string”)返回(v==”)?types.includes(“空”)?“空”:/*空=未定义*/types.includes('empty=未定义')?“undefined”:“string”:“字符串”;否则返回v的类型}//演示let types=[null,“”,“string”,undefined,NaN,Infinity,-Invinity,false,“false”,true,“true”,0,1,-1,0.1,“test”,{var:1},[1,2],{0:1,1:2,长度:2}]for(i在类型中){console.log(“natureof”,类型[i],“=”,natureof(类型[i]”,“null”,“NaN”,“-ninfinity”,“number”,“array”,“empty=undefined”))}

只要在所有地方用==替换==即可。

==是一个松散或抽象的相等比较

==是严格的相等比较

有关更多详细信息,请参阅MDN关于平等比较和相同性的文章。

JavaScript在检查“空”值方面非常灵活。我猜你实际上是在寻找空字符串,在这种情况下,这个更简单的代码会起作用:

if(!pass || !cpass || !email || !cemail || !user){

它将检查空字符串(“”)、null、undefined、false以及数字0和NaN。

请注意,如果您是专门检查数字,则使用此方法错过0是一个常见错误,num!==对于返回-1的函数(例如indexOf),首选0(或num!==-1或~num(同时检查-1的黑客代码))。