假设这个月1号是星期一,提示用户输入本月的日期(即1日 - 31日)
,返回用户输入日期是星期几(中)
!如果你给我的日期不正确 我要提示你不正确,在重新询问你的日期 直到正确为止
prompt() 用输入的数字 1-30
while (true) {
// 进入一个无限循环,循环体内部的代码会一直执行,直到遇到break语句
var day = prompt("请输入日期") // 弹出一个对话框,提示用户输入日期,并将输入的值赋给变量day
if (day <= 0 || day > 31 || isNaN(day)) { // 检查输入的日期是否在1到31之间,或者是否为数字
alert("日期输入不正确") // 如果输入不正确,弹出警告框,并继续下一次循环
} else {
// 如果输入的日期是有效的数字,计算日期对应的星期几
var data = day % 7 // 使用模7运算来确定星期几,因为一周有7天
if (data == 0) { // 如果余数为0,根据模运算的特性,这实际上是第7天,即星期日
alert("今天是星期日") // 弹出提示框,告知用户今天是星期日
break // 退出循环
}
alert("今天是星期" + data) // 否则,弹出提示框,告知用户今天是星期几(余数+1,因为余数0对应星期日)
break // 退出循环
}
}
然而,这段代码存在逻辑错误。模7运算的结果应该是0到6,分别对应星期日到星期六。但是,代码中将余数直接用作星期数,这会导致星期日之后的日期显示错误。正确的做法是将余数加1,然后根据结果来确定星期几。例如,如果余数是1,那么应该是星期一。
此外,prompt
函数返回的始终是字符串类型,所以使用isNaN
函数来检查输入是否不是数字是正确的。但是,如果输入的日期是有效的数字,应该将其转换为整数类型,例如使用parseInt(day)
。
修正后的代码可能如下:
while (true) {
var dayStr = prompt("请输入日期");
var day = parseInt(dayStr); // 将输入转换为整数
if (isNaN(day) || day < 1 || day > 31) {
alert("日期输入不正确");
} else {
var weekDay = (day - 1) % 7; // 计算星期几,1对应星期一,所以减1
var days = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
alert("今天是" + days[weekDay]); // 弹出提示框,告知用户今天是星期几
break; // 退出循环
}
}