Javascript 基本测验的if-else循环逻辑有困难

Javascript 基本测验的if-else循环逻辑有困难,javascript,Javascript,我正在尝试构建一个基本的测验,但在最后一部分遇到了困难:在回答了最后一个问题后,我想提醒(“测验结束”)并将变量重置回0 我已经指出:若问题数量大于问题长度数组,则输出“测验结束”。。但它只有在测验结束后再次点击后才会输出。。现在,如果我把它设为=问题的长度,它会过早地将此警报输出为一个问题 有人能解释一下我走的路是否正确吗?有没有一种方法可以像我写的那样解决这个问题而不重写所有的逻辑?我确信有更有效的方法可以做到这一点,我真的很想知道如何改进我的方法 (如果全屏打开代码段,则按钮不会因错误而隐

我正在尝试构建一个基本的测验,但在最后一部分遇到了困难:在回答了最后一个问题后,我想提醒(“测验结束”)并将变量重置回0

我已经指出:若问题数量大于问题长度数组,则输出“测验结束”。。但它只有在测验结束后再次点击后才会输出。。现在,如果我把它设为=问题的长度,它会过早地将此警报输出为一个问题

有人能解释一下我走的路是否正确吗?有没有一种方法可以像我写的那样解决这个问题而不重写所有的逻辑?我确信有更有效的方法可以做到这一点,我真的很想知道如何改进我的方法

(如果全屏打开代码段,则按钮不会因错误而隐藏)

//JSON样式的数据
var所有问题=[
{ 
问题:“谁是联合王国首相?”,
选择:[“大卫·卡梅伦”、“戈登·布朗”、“温斯顿·丘吉尔”、“托尼·布莱尔”],
正确答案:0
},
{
问题:“你最喜欢什么颜色?”,
选择:[“绿色”、“棕色”、“蓝色”、“红色”],
正确答案:0
},
{
问题:“你叫谁?”,
选项:[“鲍勃”、“保罗”、“安德烈”、“亚历克斯”],
正确答案:0
},
];
//变数
var question=document.querySelector('.questionX');
变量编号=0;
var answer=document.querySelector('.userAnswer');
var得分=0;
//使用文本更新DOM的函数表达式
让updateText=function(){
if(所有问题的类型[questionNumber]。问题!=='undefined'){
//问题被定义并存在
question.innerHTML=所有问题[questionNumber]。问题
对于(i=0;iallQuestions.length提醒您在allQuestions.length中得分,并将分数设置为0,将问题设置为0,然后删除并重新提交可能的答案。
如果(问题编号>=allQuestions.length){
警报(`QUICK结束,您在${ALLQUISES.length}`中获得${score}`);
得分==0;
问题编号==0;
clearOptions();
updateText();
}
//否则,如果答案值=正确答案值,则为分数加1,为问题编号加1,删除旧选项,并使用新选项更新下拉列表。
else if(document.querySelector('.userAnswer')。值==allQuestions[questionNumber]。correctAnswer){
问题编号+=1;
警惕(“耶”);
clearOptions();
分数+=1;
updateText();
} 
//保持警惕(“ney”),继续回答同一个问题
否则{
警报(“Ney,再试一次”)
}
}
document.querySelector(“#nextQuestion”).addEventListener('click',function(){
nextQuestion();
})

页面标题
测验
你最喜欢的乐器是什么

挑一个 下一个
首先,在结尾处修复
问题未定义错误
,要执行此操作,请更改此项:

if (typeof allQuestions[questionNumber].question !== 'undefined') 
为此:

 if (allQuestions[questionNumber] )
if (questionNumber == allQuestions.length -1 ) {
    alert(`end of quiz, you scored ${score+1} out of ${allQuestions.length}`);
    score == 0;
    questionNumber == 0;
    clearOptions();
    // updateText(); <-- you do not need this
}
如果出现以下情况,则更改此

if (questionNumber >= allQuestions.length) {
    alert(`end of quiz, you scored ${score} out of ${allQuestions.length}`);
    score == 0;
    questionNumber == 0;
    clearOptions();
    updateText();
}
为此:

 if (allQuestions[questionNumber] )
if (questionNumber == allQuestions.length -1 ) {
    alert(`end of quiz, you scored ${score+1} out of ${allQuestions.length}`);
    score == 0;
    questionNumber == 0;
    clearOptions();
    // updateText(); <-- you do not need this
}
if(questionNumber==allQuestions.length-1){
警报(`QUICK结束,您在${ALLQUESTS.length}`中获得${score+1}`);
得分==0;
问题编号==0;
clearOptions();

//updateText();不,这正是我所尝试的..我想这确实与我执行逻辑的顺序有关,但我无法在
nextQuestion()中对其进行思考
在first if blockno中,如我所说,我尝试过,但之后仍需要额外的点击是的,但分数从0开始,点击3次按钮即可到达最终警报,您正在添加一次。因此,第三次点击后的分数现在肯定应该是4?嘿,您知道我如何从这个json文件(下面)加载这些变量吗而不是上面的变量??: