请告诉我,如果没有哈希,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
抱歉,我忘了提起它答案 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.hash
,you'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
}