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