TypeError:undefined不是对象(计算';XYZ';)-JavaScript

TypeError:undefined不是对象(计算';XYZ';)-JavaScript,javascript,html,css,typeerror,Javascript,Html,Css,Typeerror,希望到目前为止大家都过得愉快 我在JavaScript中遇到了一个奇怪的问题。脚本的任务是按顺序执行 每次有人访问页面时,div都会有所不同。为此,我生成并排列随机数,确保没有双数。然后,我给每个div一个编号,并在放入之前对它们进行排序 把它们放回页面上。现在,我被困在数组中的div排序部分 我得到了一个似乎没有意义的TypeError,因为我已经使用了“typeof”来查看输出是否未定义,但它们是实数。 代码如下: HTML: 现在是分数,JS: var BilderListe = ["",

希望到目前为止大家都过得愉快

我在JavaScript中遇到了一个奇怪的问题。脚本的任务是按顺序执行 每次有人访问页面时,div都会有所不同。为此,我生成并排列随机数,确保没有双数。然后,我给每个div一个编号,并在放入之前对它们进行排序 把它们放回页面上。现在,我被困在数组中的div排序部分

我得到了一个似乎没有意义的TypeError,因为我已经使用了“typeof”来查看输出是否未定义,但它们是实数。 代码如下:

HTML:

现在是分数,JS:

var BilderListe = ["","", "", "", "", "", "", "", "", "","","","","",""];
//generating an array until there are no doubled values
do{
    var funktionsfaehig = true;
    Zahlenzuweisung();
    Dopplungspruefung();
}while(funktionsfaehig == false);
console.log(BilderListe);
Zuordnung();

//generating a random list of numbers   
function Zahlenzuweisung(){
    for(var i=0 ; i<BilderListe.length; i++){
        BilderListe[i] = Math.round(Math.random()*1000);
        if(BilderListe[i] > 1000){
            BilderListe[i] = 1000;
        }
        //alert(BilderListe[i]);
    }
    console.log("Zahlenzuweisung " + BilderListe);
}

//sorting the list so it can be checked more easily, .sort did always miss one number for some reason
function Dopplungspruefung(){
    var Tauschen
    var PruefungsListe;

    PruefungsListe = BilderListe.slice();
    console.log("Dopplungspruefung ist " + BilderListe)
    console.log(PruefungsListe);
    do{
        var getauscht = false;
        for(i=0; i<PruefungsListe.length; i++){
            if(PruefungsListe[i] > PruefungsListe[i+1]){
                Tauschen = PruefungsListe[i];
                PruefungsListe[i] = PruefungsListe[i+1];
                PruefungsListe[i+1] = Tauschen;

                getauscht = true;
            }
        }           
    }while(getauscht == true);
    console.log(PruefungsListe);
    console.log("Nach der Prüfung ist " + BilderListe);
    DerPruefer(PruefungsListe);
}

//checking the sorted list for doubled numbers
//if there are any, new numbers will be generated
function DerPruefer(PruefungsListe){    
    console.log("Der Pruefer wurde gestartet");
    for(i=0; i < PruefungsListe.length; i++){
        if(PruefungsListe[i] == PruefungsListe[i+1]){
            console.log("Etwas war gleich");
            funktionsfaehig = false;
            break;
        }
    }
}

//all divs needed get gathered in one array
//then every element gets a random generated value
function Zuordnung(){
    var AlleBilder = document.getElementsByClassName("MosaikBilder");
    for(i=0; i<AlleBilder.length; i++){
        AlleBilder[i].value = BilderListe[i]
    }
    var Check = AlleBilder[0].value;
    console.log(Check);
    //Bubblesort the Pictures
    BilderSortierer(AlleBilder);
}

//Now i want to sort the elements by their value
//But they TypeError occurs, claiming that the 2nd one
//Has the value 'undefined (log says its a number)
function BilderSortierer(AlleBilder){
    var i = 0
    console.log(AlleBilder[i]);
    console.log(AlleBilder[i].value);
    console.log(typeof(AlleBilder[i].value));
    console.log(AlleBilder[i+1]);
    console.log(AlleBilder[i+1].value);
    console.log(typeof(AlleBilder[i+1].value));
    var Wechsler
    var BilderCheck = true;
    do{
        for(i=0; i<AlleBilder.length; i++){
            if(AlleBilder[i].value > AlleBilder[i+1].value){
                Wechsler = AlleBilder[i];
                AlleBilder[i] = AlleBilder[i+1];
                AlleBilder[i+1] = Wechsler;
                BilderCheck = false;
            }
        }       
    }while(BilderCheck == true);
}
var-BilderListe=[、、、、、、、、、、、、、、、、、、、、、、、、];
//生成数组直到没有加倍值
做{
var funktionsfaehig=真;
扎伦祖维松();
Dopplungspruefung();
}while(funktionsfaehig==false);
console.log(BilderListe);
祖尔德农();
//生成随机数字列表
函数Zahlenzuweisung(){
对于(变量i=0;i 1000){
BilderListe[i]=1000;
}
//警报(BilderListe[i]);
}
console.log(“Zahlenzuweisung”+BilderListe);
}
//对列表进行排序,以便更容易地检查。由于某种原因,排序总是漏掉一个数字
函数Dopplungspruefung(){
瓦尔陶森酒店
PruefungsListe变种;
PruefungsListe=BilderListe.slice();
log(“Dopplungspruefung ist”+BilderListe)
控制台日志(PruefungsListe);
做{
var getauscht=false;
对于(i=0;i PruefungsListe[i+1]){
Tauschen=PruefungsListe[i];
PruefungsListe[i]=PruefungsListe[i+1];
PruefungsListe[i+1]=Tauschen;
getauscht=true;
}
}           
}while(getauscht==true);
控制台日志(PruefungsListe);
console.log(“Prüfung ist的名称”+BilderListe);
德普吕费尔(普鲁吕费尔斯特);
}
//检查已排序列表中的双倍数字
//如果有,将生成新的编号
函数DerPruefer(PruefungsListe){
console.log(“Pruefer-wurde-gestaret”);
对于(i=0;i
allebileder[i+1]
在您处于最后一个索引时未定义

所以你需要改变你的循环

for(i=0; i<AlleBilder.length-1; i++){
(i=0;i非常简单

allebileder[i+1]
在您处于最后一个索引时未定义

所以你需要改变你的循环

for(i=0; i<AlleBilder.length-1; i++){

for(i=0;i看起来您的最终迭代将在数组中查找不存在的元素(即超出边界)

试着改变

for(i=0; i<AlleBilder.length; i++)

for(i=0;i看起来您的最终迭代将在数组中查找不存在的元素(即超出边界)

试着改变

for(i=0; i<AlleBilder.length; i++)

对于(i=0;i当
i
allebileder.length-1
时,则
allebileder[i+1]
未定义
。当
i
allebileder.length-1
时,则
allebileder[i+1]
未定义
。非常感谢@TLP!这确实有帮助:)但是为什么这个函数之前的函数没有-1就可以工作呢?因为另一个函数不寻找
PruefungsListe[i+1]
。记住数组中的最后一个元素是
length-1
:一个长度为10的数组有0-9个元素,所以元素10不存在。好吧,我想我理解了一点,但是为什么[i+1]不存在呢函数Dopplungpruefung und DerPruefer的for循环中的元素的行为是这样的?这是因为JavaScript的一个怪癖,当您试图访问一个对象的成员时,它只会返回一个错误,而该对象在您查找它的数组中不存在。如果您试图访问这样一个对象的根,它不会返回一个错误(即没有点)。为了举例说明,请尝试运行以下代码:
let a=[1,2,3];console.log(a[2]>a[3]);
。这不会返回错误,但会返回以下代码:
let b=[{n:1},{n:2},{n:3}];console(b[2].n>b[3];
好的,非常感谢,这已经得到了完美的解释!非常好的示例(y)感谢@TLP!这确实有帮助:)但是为什么这个函数之前的函数没有-1就可以工作呢?因为另一个函数不寻找
PruefungsListe[i+1]
。记住数组中的最后一个元素是
length-1
:一个长度为10的数组有0-9个元素,所以元素10不存在。好吧,我想我理解了一点,但是为什么[i+1]不存在呢函数Dopplungpruefung und DerPruefer的for循环中的元素的行为是这样的?这是因为JavaScript的一个怪癖,当您试图访问一个对象的成员时,它只会返回一个错误,而该对象在您查找它的数组中不存在。如果您试图访问这样一个对象的根,它不会返回一个错误(即不带点)。为了举例说明,请尝试运行以下代码:
let a=[1,2,3];console.log(a[2]>a[3]);
。这不会返回错误,但会返回以下代码:
let b=[{n:1},{n:2},{n:3}];console(b[2].n>b[3].n);
好的,非常感谢,这已经得到了完美的解释!很好的示例(y)
for(i=0; i<AlleBilder.length; i++)
for(i=0; i<AlleBilder.length-1; i++)