开发者问题收集

Javascript 错误 - 无法在未定义的情况下运行 .split

2013-02-05
2344

我想这真的很简单,但我似乎无法实现它。我有这个代码片段...

var choice = location.href.split("?")[1].split("=")[1];

它工作正常,直到“选择”为空,然后抛出以下错误....

TypeError: location.href.split(...)[1] is undefined

我理解这是因为您不能对未定义的变量调用拆分,我认为我的解决方案是存储变量,然后如果已满则拆分它,如果未定义则忽略它。

有人可以帮我做这个吗?

3个回答

这样做并不是很酷,但是如果您希望查询字符串中只有一个参数,您可以这样做:

var choice = (location.href.split("?")[1] || '').split("=")[1];

如果查询字符串中未设置 choice ,则会将其显示为 undedfined

dfsq
2013-02-05

信息不足,但第一个拆分的 1 索引的属性 href 未定义,或者最后一个拆分的第二项未定义。

您可以将拆分分成几个语句。

var choice;
var firstSplit = location.href;

if (firstSplit) {
    var secondSplit = firstSplit.split("?");
}
if (secondSplit[1]) {
    choice = secondSplit[1].split("=");
}

然后,您可以使用最后一个拆分返回的任何内容。

colin-higgins
2013-02-05

如果您尝试拆分可能有或可能没有查询字符串的 URL,则会看到此异常。您应该在尝试操作查询字符串之前检查它是否存在:

var choice;
var outerSplit = window.location.href.split('?');
var innerSplit;
if (outerSplit.length > 1) {
    innerSplit = outerSplit.split('=');
    if (innerSplit.length > 1) {
        choice = innerSplit[1];
    }
}

如果您发现自己经常执行这种类型的查询字符串操作,您可能需要投资一个可重复使用的函数,例如 这个问题 中的函数。

jbabey
2013-02-05