这个问题(或类似的)似乎经常被问到,但我已经尝试了很多方法来检查从我拥有的函数返回的值是否为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库来做这个。
答案 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!");
}