JavaScript 抛出未定义的错误

标签 javascript undefined

它应该做什么 - 示例

url1(pages,"ALT") returns "www.xyz.ac.uk" 
url1(pages,"xyz") returns ""

错误 - TypeError: Cannot call method 'toUpperCase' of undefined

这只是一些类(class)作业,我遇到了这些错误。任何帮助将不胜感激

function index(string,pattern,caseSensitive) {
    if(caseSensitive == false) {
        var v = string.toUpperCase();
    } else {
        var v = string;
    }

    return indexNumber = v.indexOf(pattern);
}
var pages = [ "|www.lboro.ac.uk|Loughborough University offers degree programmes and world class research.", "!www.xyz.ac.uk!An alternative University" , "%www%Yet another University"];

    alert(url1(pages, "ALT"));

function url1(pages,pattern) {
    var siteContent = [];
    for(i=0;i<pages.length;i++) {
        var seperator = pages[i].charAt(0);
        if(pages[i].indexOf(seperator)>0){
            siteContent = pages[i].split(pages[i].indexOf(seperator));      
        }
        if( index(siteContent[2],pattern,false)>=0){
            return siteContent[1]; 
        }else{
            return "";
        }

    }
}

最佳答案

    if(pages[i].indexOf(seperator)>0){
        siteContent = pages[i].split(pages[i].indexOf(seperator));      
    }
    if( index(siteContent[2],pattern,false)>=0){
        return siteContent[1]; 
    }else{
        return "";
    }

如果pages[i].indexOf(seperator)<=0 , siteContent仍然是上次迭代的内容。如果第一次迭代发生这种情况,siteContent还是[] , 和 siteContent[2]undefined .

另一个问题:表达式pages[i].indexOf(seperator)返回一个数字,pages[i].split需要一个定界字符串作为参数。由于数字没有出现在您的输入中,您将始终得到一个单元素数组,并且 siteContent[2]永远是undefined .摆脱 .indexOf(seperator) , 改为 siteContent = pages[i].split(seperator) .

还有一个:摆脱else { return ""; } .添加 return "";for之后循环。

最后,在第一个if声明条件,改变.indexOf(seperator) > 0.indexOf(seperator, 1) !== -1 .因为你得到 seperator从字符串的第一个字符开始,它将在 0 处找到.您想要第二次出现,所以开始搜索 1 .此外,.indexOf返回 -1如果找不到子字符串。您需要在 if 中考虑到这一点条件。

旁注,因为这不会导致您的问题:永远不要使用 == false . JS 会强制执行类似 0 的内容和 ""== false .如果那是你想要的,只需使用 !运算符,因为表达式与值无关 false .

我的最终答案是http://jsfiddle.net/QF237/

关于JavaScript 抛出未定义的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19848982/

相关文章:

Javascript:浏览器中的 Airplay

javascript - 如何在 catch 方法中访问来自 new Error(data) 的数据?

javascript - 即使尚 undefined variable ,如何检查是否已声明?

javascript - 如何修复 React.js 中的 ' "X"is not defined no-undef' 错误

javascript - 使用 contentEditable 时表格被选中

javascript - JavaScript 中指定的按钮的 onclick 属性在 html 检查中不可见

javascript - Reactjs 中的 maxLength

javascript - 如何检查分配给缺失的匿名函数表达式的变量是否为 null 或 undefined?

javascript - someEmptyArray.push(data) 之后数组的索引 0 未定义

javascript - Angular JS : Accessing a $scope. 变量在 $http.get block 内定义以在另一个 $http.get 中使用