防止未定义的数组条目

时间:2016-01-12 07:40:25

标签: javascript php arrays

我有两个简单的函数,当被调用时,它们会向后移动一个条目,或者在数组中向前移动一个条目。然而,当你到达最后并且所有条目都已经显示时,还有另外一个" undefined"条目。有关如何解决此问题的任何建议吗?

function nextSlide() {
            if (slide_no < slides.length) {
                slide_no++;
                document.getElementById("display").src = slides[slide_no];
                document.getElementById("func_slide_desc").innerHTML = desc[slide_no];
                document.getElementById("func_slide_name").innerHTML = names[slide_no];  

            } 
            else if (slide_no===slides.length){
                break;
            }

我想我需要写一行来检查是否已经到达阵列的末尾。但我不确定应该如何做到这一点。我尝试过以下操作:

<Pivot>
    <PivotItem>
        <Listview>
           <Listview.Itemtemplate>
               <DataTemplate>
                   <Listview>

但是当我尝试它时,它只是停在第一个条目而nextSlide函数将不再起作用

2 个答案:

答案 0 :(得分:1)

问题是,要访问数组元素,您需要索引在0到数组长度之间 - 1。

在您的nextSlide()首次实施中,您将执行以下操作:

function nextSlide() {
    if (slide_no < slides.length) {
        slide_no++;

这意味着当slide_no等于length-1并且您调用该函数时,if()条件将为true,因为slide_no将小于slides.length。然后你向slide_no添加1,这意味着slide_no现在等于slides.length,你超出索引限制1 - 这就是你得到一个未定义值的原因。 我会像这样重写它

function nextSlide() {
    if (slide_no < slides.length - 1) {
        slide_no++;
        document.getElementById("display").src = slides[slide_no];
        document.getElementById("func_slide_desc").innerHTML = desc[slide_no];
        document.getElementById("func_slide_name").innerHTML = names[slide_no];
    }
}

答案 1 :(得分:1)

删除else if及其中的所有内容,同时将slide_no < slides.length替换为slide_no < slides.length - 1或将行slide_no++移至if块中的命令末尾。

所以它会解决你的问题。问题是在访问slide_no数组之前增加slides

为了避免执行你不需要在函数中执行break的事情,只需简单地省略添加任何新代码(仅将代码添加到body中)或将return;放入else语句中如果你需要从进一步的执行中停止功能。