如何检测URL中#mystring是否存在并修复split未定义错误?
修复方案及代码优化
错误原因
你遇到的Uncaught TypeError是因为当URL里没有#时,link.split("#")得到的数组只有1个元素,data[1]就是undefined,自然没法调用split方法。
修复后的代码
function my_function() { // 直接获取URL的哈希部分,自带#前缀 const hash = window.location.hash; // 先判断哈希是否存在,避免后续报错 if (hash) { // 去掉开头的#,得到哈希内容 const hashContent = hash.slice(1); // 提取第一个&之前的部分,没有&就返回整个内容 const widget_type = hashContent.split("&")[0]; if (widget_type === 'mystring') { // 这里直接用已经处理好的hashContent就行,不用再调用substr(1) console.log(hashContent); } } } my_function();
关键优化点
- 直接用
window.location.hash:这是浏览器提供的专门获取URL哈希部分的属性,比把整个location转成字符串再拆分更可靠,也更简洁。 - 先判断哈希存在性:在处理哈希内容前先检查
hash是否为空,从根源避免undefined调用方法的错误。 - 简化哈希内容处理:用
slice(1)去掉开头的#,比substr(1)语义更清晰;split("&")[0]在没有&的情况下会返回整个哈希内容,兼容两种场景。
内容的提问来源于stack exchange,提问作者deverasha
相关产品推荐
相关产品推荐

