我有以下检查网址变量:
$.urlParam = function(name) {
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
};
我想只在URL中存在变量时设置变量。
示例网址:
http://myUrl.com/search?searchTerm=red
示例JS,它正常工作:
if(typeof $.urlParam('searchTerm') != 'undefined'){
var searchTerm = $.urlParam('searchTerm');
}
但是,如果我尝试以下(检查另一个变量)代码失败,但FF控制台没有错误:
if(typeof $.urlParam('storeSearch') != 'undefined'){
var storeSearch = $.urlParam('storeSearch');
}
有没有更好的方法来检查是否设置了URL变量,然后将该值分配给javascript变量?
答案 0 :(得分:1)
您的功能永远不会返回undefined
,因此您使用的支票将无法正常运行。
立即改进是将函数更改为适当地返回undefined
:
$.urlParam = function(name) {
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1]; // undefined if no match for capturing group 1
};
但是,这仍然不够好,因为如果你的正则表达式根本不匹配,那么exec
会返回null
而null[1]
会产生错误。所以进一步改进:
$.urlParam = function(name) {
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
return (results || undefined) && results[1];
};
results || undefined
计算数组(可能有也可能没有[1]
元素)。如果它解析为undefined
,则undefined && results[1]
也是undefined
。如果它解析为数组,则[1]
将评估第二个元素(如果存在),或者undefined
(如果不存在)。
在所有情况下,最终值为undefined
或捕获组的匹配内容。