第一个if-else语句按预期工作,当地址栏变量在那里时,它执行if部分,而不在那里执行其他...但是,在VAR行之后,将所有其他语句拆分为一切投入不起作用
var hasVars = 0;
var loc = window.location.href;
if(loc.indexOf('?')>-1) { hasVars = 1; }
if(hasVars==1) { alert("ttt"); }
else { alert("eee"); }
var query = loc.slice(loc.indexOf('?') + 1);
var vars = query.split('&');
var pair = vars[0].split('=');
var data1 = pair[1].split('.');
if(hasVars==1) { alert("ttt"); }
else { alert("eee"); }
我评论了每一行并将它们放回来并且问题似乎与data1变量行有关,注释掉它工作正常但是有了else语句没有运行
答案 0 :(得分:2)
代码的var query (...)
部分仅在有查询参数时才有效。所以当没有问题时就会出现问题。一种解决方案是在那里放置一个if
。
var hasVars = 0;
var loc = window.location.href;
if(loc.indexOf('?')>-1) { hasVars = 1; }
if(hasVars==1) { alert("ttt"); }
else { alert("eee"); }
if (hasVars==1) { // added this
var query = loc.slice(loc.indexOf('?') + 1);
var vars = query.split('&');
var pair = vars[0].split('=');
var data1 = null;
if (pair[1] != undefined) { // added this for: "page?var" cases
data1 = pair[1].split('.');
} // added
} // added
if(hasVars==1) { alert("ttt"); }
else { alert("eee"); }
如果没有查询参数,query
就是网址。让我一步一步解释。示例页面:http://example.com/page
query -> 'http://example.com/page'
vars -> ['http://example.com/page']
pair -> ['http://example.com/page']
问题出在:
var data1 = pair[1].split('.');
由于pair
在pair[1]
中没有任何项目。上面的代码与undefined.split('.')
相同,这会产生运行时错误,从而阻止执行以下行(以及第二行,如果您要求)。
答案 1 :(得分:0)
你究竟是什么意思声明不起作用?这两个警报都没有被触发?
我猜测pair[1]
不存在并导致异常;你可以发布样本query
吗?
答案 2 :(得分:0)
第二个警报未触发的原因是query
时undefined
为hasVars !== 1
。这会导致query
为undefined
,这意味着它不是string
且没有字符串方法(如split
)。尝试在非字符串对象上使用字符串方法会引发错误,从而阻止其余代码运行。
要解决此问题,请将query
(以及其余字符串)定义为:
var query = hasVars ? loc.slice(loc.indexOf('?') + 1) : '';
var vars = hasVars ? query.split('&') : '';
var pair = hasVars ? vars[0].split('=') : '';
var data1 = hasVars ? pair[1].split('.') : '';
如果?:
不是query
,则使用三元运算符(hasVars
)将1
初始化为空字符串。
由于query
(以及其余字符串)现在被定义为string
单向或另一种方式,因此不会抛出任何错误。