Javascript Switch语句实现未提供预期行为
我正在用vanilla JavaScript开发一个测验应用程序,为了获得最佳实践,我希望确保遵循D.R.Y.原则 我有五个问题需要核对答案 因此,我没有五次使用Javascript Switch语句实现未提供预期行为,javascript,if-statement,switch-statement,Javascript,If Statement,Switch Statement,我正在用vanilla JavaScript开发一个测验应用程序,为了获得最佳实践,我希望确保遵循D.R.Y.原则 我有五个问题需要核对答案 因此,我没有五次使用if语句,而是想实现一个switch语句,如下所示: callback.js: function submitAnswers() { var total = 5; var score = 0; // Get User Input var q1 = document.forms['quizForm']['q1'].valu
if
语句,而是想实现一个switch
语句,如下所示:
callback.js:
function submitAnswers() {
var total = 5;
var score = 0;
// Get User Input
var q1 = document.forms['quizForm']['q1'].value;
var q2 = document.forms['quizForm']['q2'].value;
var q3 = document.forms['quizForm']['q3'].value;
var q4 = document.forms['quizForm']['q4'].value;
var q5 = document.forms['quizForm']['q5'].value;
// Validation
for (i = 1; i <= total; i++) {
if (eval('q'+i) == null || eval('q'+i) == '') {
alert('You missed question '+ i);
return false;
}
}
// Set Correct Answers
var answers = ["d","b","c","a","b"];
// Check answers
switch (answers) {
case q1 == answers[0]:
score++;
break;
case q2 == answers[1]:
score++;
break;
case q3 == answers[2]:
score++;
break;
case q4 == answers[3]:
score++;
break;
case q5 == answers[4]:
score++;
break;
}
alert('You scored '+score+' out of ' +total);
}
函数submitAnswers(){
var总计=5;
var得分=0;
//获取用户输入
var q1=document.forms['quizForm']['q1'].value;
var q2=document.forms['quizForm']['q2'].value;
var q3=document.forms['quizForm']['q3'].value;
var q4=document.forms['quizForm']['q4'].value;
var q5=document.forms['quizForm']['q5'].value;
//验证
对于(i=1;i而言,switch
值必须与一个大小写表达式匹配。answers
将永远不会与q1==answers[0]
或类似的表达式匹配。如果将其更改为switch(true)
则开关将工作,但您仍将只检查一个答案,而不是全部五个答案(而且开关的使用也不是很好)
如果使用五个不同的qX
变量,则需要五个不同的If
语句。但这不是您应该做的。请参阅***
注释:
function submitAnswers() {
var total = 5;
var score = 0;
var i; // *** Note we declare `i` so it's not an implicit global
// Get User Input
// *** ...as an array
var responses = [];
for (i = 1; i <= 5; ++i) {
responses.push(document.forms['quizForm']['q' + i].value);
};
// Set Correct Answers
// *** Moved
var answers = ["d","b","c","a","b"];
// Validation and check answers both at once
for (i = 0; i < responses.length; ++i) {
// *** `value` is never `null`, we can just use ! here
if (!responses[i]) {
alert('You missed question '+ i);
return false;
}
// *** Check response
if (response[i] == answers[i]) {
++score;
}
}
alert('You scored '+score+' out of ' +total);
}
函数submitAnswers(){
var总计=5;
var得分=0;
var i;//***注意我们声明'i',因此它不是一个隐式全局变量
//获取用户输入
//***…作为一个数组
var响应=[];
对于(i=1;i简单方法。使用所有选择的答案形成一个数组,并使用array\every
var correctanswers = ["d","b","c","a","b"];
var choosenanswers = [q1,q2,q3,q4,q5];
var isallcorrect = choosenanswers.every(function(item,index){
return item == correctanswers[index];
});
console.log(isallcorrect);
您可以为此而不是switch语句创建一个可重用的函数,并使用for循环检查每个目标值
//答案
var answers=[“a”、“b”、“c”]
//正确增量
var=0;
//检查应答功能
var checkAnswer=函数(问题,答案){
如果(问题!==答案){
返回false;
}
返回true;
}
var form=document.getElementById('form');
表.addEventListener('submit',函数(e){
e、 预防默认值();
//请注意长度-1,因为这里有button元素
/**
*如果要为每个输入声明变量,请更改
*e.target.length和e.target[i]。q/a数组的值
*/
对于(var i=0;i
提交答案
请阅读一本关于Javascript和如何使用开关的书语句开关比较条件开关(条件)
againts eachcase
您确实是,switch语句条件是它在每个case中比较的条件。由于您比较了几个单独的值,因此在此处使用switch没有意义。有更好的方法可以做到这一点,就像在.t.J中使用循环并进行if
比较一样,谢谢您的帮助.我会研究你在这里写的笔记和你的博客文章。
var correctanswers = ["d","b","c","a","b"];
var choosenanswers = [q1,q2,q3,q4,q5];
var isallcorrect = choosenanswers.every(function(item,index){
return item == correctanswers[index];
});
console.log(isallcorrect);