检查变量是否设置

时间:2014-03-16 17:32:01

标签: javascript jquery

我有以下检查网址变量:

$.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变量?

1 个答案:

答案 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会返回nullnull[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或捕获组的匹配内容。