检查返回函数的值是否为空?

时间:2013-06-28 16:29:38

标签: javascript jquery

这个问题(或类似的)似乎经常被问到,但我已经尝试了很多方法来检查从我拥有的函数返回的值是否为null;无济于事。

我的功能,按名称获取URL参数:

function getURLParameter(name) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
    );
}

但是,显然参数可能不存在,所以我需要检查返回的值。

执行console.log( getURLParameter('client') );会返回null ...但是执行空检查不起作用。

我尝试了以下内容:

if ( getURLParameter("client") !== null ) {

    alert("It's there matey!");

}

if ( getURLParameter("client") != null ) {

    alert("It's there matey!");

}

if ( ! getURLParameter("client") ) {

    alert("It's there matey!");

}

这些似乎都不适合我。

我有什么地方出错吗?我可以用vanilla JS或者使用jQuery库来做这个。

3 个答案:

答案 0 :(得分:5)

问题是decodeURI,当您将"null"传递给它时,会返回字符串 null。解决方案是在调用null之前进行decodeURI检查。你可以通过将功能分解为其部分来找到它:

function getURLParameter(name) {
    var rex = RegExp(name + '=' + '(.+?)(&|$)');
    var result = rex.exec(location.search);
    var rv = decodeURI(
      (result||[,null])[1]
    );
    return rv;
}

...并在浏览器内置的调试器中浏览它。

对于那些喜欢console.log式调试的人:

function getURLParameter(name) {
    var rex = RegExp(name + '=' + '(.+?)(&|$)');
    var result = rex.exec(location.search);
    console.log("typeof result = " + typeof result);
    console.log("result = " + result);
    var rv = decodeURI(
      (result||[,null])[1]
    );
    console.log("typeof rv = " + typeof rv);
    return rv;
}

... getURLParameter("foo")向我们展示了:

typeof result = object
result = null
typeof rv = string

答案 1 :(得分:3)

那是因为你的函数返回的值是一个字符串('null'),因此你的测试失败了。

var result = getURLParameter("client");
console.log('Value: ' + result);                // 'null'
console.log('Data type: ' + typeof(result));    // string
console.log(result!==null);                     // true
console.log(result!=null);                      // true
console.log(!result);                           // false

它返回一个字符串,因为您将null值作为参数传递给decodeURI函数,该函数将转换为字符串'null'

因此,我修改了您的函数getURLParameter,以便在调用null之前检查参数的值是decodeURI 。见下文:

function getURLParameter(name) {
    var param = RegExp(name + '=' + '(.+?)(&|$)').exec(location.search) || null;
    return param===null ? null : decodeURI(param[1]);
}

现在,让我们再次运行测试:

var result = getURLParameter("client");
console.log('Value: ' + result);                // null
console.log('Data type: ' + typeof(result));    // object
console.log(result!==null);                     // false
console.log(result!=null);                      // false
console.log(!result);                           // true

答案 2 :(得分:1)

if ( getURLParameter("client") != 'null' ) {

    alert("It's there matey!");

}