为什么我的javascript else语句停止工作

时间:2013-12-06 03:01:02

标签: javascript

第一个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语句没有运行

3 个答案:

答案 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('.');

由于pairpair[1]中没有任何项目。上面的代码与undefined.split('.')相同,这会产生运行时错误,从而阻止执行以下行(以及第二行,如果您要求)。

答案 1 :(得分:0)

你究竟是什么意思声明不起作用?这两个警报都没有被触发?

我猜测pair[1]不存在并导致异常;你可以发布样本query吗?

答案 2 :(得分:0)

第二个警报未触发的原因是queryundefinedhasVars !== 1。这会导致queryundefined,这意味着它不是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单向或另一种方式,因此不会抛出任何错误。