如果没有哈希,location.hash.match会返回什么?

时间:2013-07-30 16:01:34

标签: javascript html

请告诉我,如果没有哈希,location.hash.match会返回什么?

我的代码:

function getHashValue(key) {
    return location.hash.match(new RegExp(key + '=([^&]*)'))[1];
}
test = getHashValue('test');

if (test == 'abc') {
    //code WORKS
}   
else if (test == 'sal') {
    //code WORKS
}     
else if (test == "") {
    //code DOESNT WORKS
}

但它不起作用

我忘了提到我的代码' getHashValue'返回哈希值的值:#test = abc

抱歉,我忘了提起它

3 个答案:

答案 0 :(得分:2)

为什么不呢?

test = getHashValue('test');
if (test === undefined) {
  //code
}

修改

错误来自 match()调用中的null返回。如果匹配为“”或null,则以下更改将返回空字符串。

function getHashValue(key) {
    var match = location.hash  .match(new RegExp(key + '=([^&]*)'));
    return match ? match[1] : "";
}

答案 1 :(得分:1)

如果您在任何不使用哈希的网站上的浏览器控制台中运行location.hashyou'll find that it returns the empty string ""

因此,正则表达式匹配将找到0结果,返回null,此时,您尝试访问null[1] ...

答案 2 :(得分:0)

location.hash将为空字符串和您的函数:

function getHashValue(key) {
  return location.hash.match(new RegExp(key + '=([^&]*)'))[1];
}

确实会返回undefined。问题是您正在错误地检查“未定义”值。将您的代码更改为:

test = getHashValue('test');
if (typeof(test) === 'undefined') {
  //code
}