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

Why does my javascript else statement stop working

本文关键字:语句 停止工作 else javascript 我的 为什么      更新时间:2024-04-20

第一个 if-else 语句按预期工作,当地址栏变量存在时,它会执行 if 部分,当不存在时,它会执行 else 部分......但是,在将所有内容拆分的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 语句无法运行

代码的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只是 URL。让我一步一步地解释。示例页面: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('.') 相同,这会导致运行时错误,从而阻止以下行(如果您要求,则为第二行(执行。

你到底是什么意思,这个陈述不起作用?两个警报都没有触发?

我猜pair[1]不存在并导致异常; 你能发布一个示例query吗?

第二个警报未触发的原因是queryhasVars !== 1undefined。这会导致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初始化为空字符串(如果未1 hasVars(。

由于query(以及其余字符串(现在以某种方式定义为string,因此不会引发任何错误。