1

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

我的函数,按名称获取 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 库中执行此操作。

4

3 回答 3

5

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

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

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

或者对于那些喜欢console.log-style 调试的人:

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 rv = 字符串
于 2013-06-28T16:36:42.310 回答
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
于 2013-06-28T16:36:29.127 回答
1

尝试

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

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

}
于 2013-06-28T16:37:25.157 回答