JavaScript提示符不';不出现
我试图用javascript制作一个简单的数学练习程序。提示警报中会给出不同的值,并将答案与用户输入进行比较。代码如下:JavaScript提示符不';不出现,javascript,html,Javascript,Html,我试图用javascript制作一个简单的数学练习程序。提示警报中会给出不同的值,并将答案与用户输入进行比较。代码如下: <html> <head> <title>Calculations</title> <script language = "javascript"> generate(); function generate() { { var calc = Math.floor(math.random() * 3 +
<html>
<head>
<title>Calculations</title>
<script language = "javascript">
generate();
function generate() {
{
var calc = Math.floor(math.random() * 3 + 1);
if (calc == 1){
calcSort == "+"
}else if(calc == 2){
calcSort == "*";
} else if (calc == 3){
calcSort == "/";
}
var num1 = Math.floor(Math.random() * 10 + 1);
var num2 = Math.floor(Math.random() * 10 + 1);
var answer;
if (calc == 1){
answer = num1 + num2;
} else if (calc == 2){
answer = num1 * num2;
} else if (calc == 3){
answer = num1 / num2;
}
var userAnswer = prompt("What is " + num1 + calcSort + num2 + "?");
if (userAnswer == answer){
alert("correct");
} else {
alert("fail");
}
}
</script>
</head>
</html>
计算
生成();
函数生成(){
{
var calc=数学地板(数学随机()*3+1);
如果(计算=1){
计算排序=“+”
}否则如果(计算=2){
calcSort==“*”;
}否则如果(计算=3){
calcSort==“/”;
}
var num1=数学地板(数学随机()*10+1);
var num2=Math.floor(Math.random()*10+1);
var回答;
如果(计算=1){
答案=num1+num2;
}否则如果(计算=2){
答案=num1*num2;
}否则如果(计算=3){
答案=num1/num2;
}
var userAnswer=prompt(“什么是“+num1+calcSort+num2+”?”);
if(userAnswer==answer){
警惕(“正确”);
}否则{
警报(“失败”);
}
}
没有出现提示,有什么问题吗?在
generate()
的函数声明开头有一个额外的{
,并且没有定义数学
,因为您需要使用数学
(区分大小写)来使用实用程序函数。您有一个额外的{
在generate()
函数声明的开头,也没有定义math
,因为您需要使用math
(区分大小写)来使用实用程序函数。几个问题:
- 在函数的开头有一个额外的
{
- JS区分大小写,因此使用
而不是Math
Math
- 您使用
而不是=
尝试将值分配给=
calcSort
var
声明所有变量,否则它们将是全局变量-目前您没有声明calcSort
另外请注意,如果您检查浏览器的JS控制台是否存在错误,则可以发现上面的前两个问题。缺少的{
将导致“输入意外结束”错误,而第二个将导致“ReferenceError:未定义数学”。(与=
相对的=
问题实际上不是语法错误,因此不会在控制台中报告。)几个问题:
- 在函数的开头有一个额外的
{
- JS区分大小写,因此使用
而不是Math
Math
- 您使用
而不是=
尝试将值分配给=
calcSort
var
声明所有变量,否则它们将是全局变量-目前您没有声明calcSort
另外请注意,如果您检查浏览器的JS控制台是否存在错误,则可以发现上面的前两个问题。缺少的{
将导致“输入意外结束”错误,而第二个将导致“ReferenceError:未定义数学”。(与=
相对的=
事实上不是语法错误,因此不会在控制台中报告。)关于Alex W答案的评论移动到此处:
除了Alex W的答案之外,您还尝试使用相等运算符(=
)而不是赋值运算符(=
)来赋值calcSort
),并且您正在全局范围(bad)中定义calcSort
。以下是一个有效的JSFIDLE:
另外,为了好玩,我想向您展示一下如何轻松地清理代码,使其更易于维护。对我来说,将calc
与数字进行比较的多个代码块是一种代码气味。我将每个calc
结果的所有逻辑隐藏到一个小助手对象数组中。然后您可以随机选择一个来自数组的操作。当您要添加另一个操作时,只需向操作
数组中添加一项即可:
function generate() {
var operations = [
{ symbol: '+', calc: function(a, b) { return a + b; }}, // 0
{ symbol: '*', calc: function(a, b) { return a * b; }}, // 1
{ symbol: '/', calc: function(a, b) { return a / b; }} // 2
];
var calc = Math.floor(Math.random() * operations.length + 1) - 1;
var operation = operations[calc];
var num1 = Math.floor(Math.random() * 10 + 1);
var num2 = Math.floor(Math.random() * 10 + 1);
var answer = operation.calc(num1, num2);
var userAnswer = prompt("What is " + num1 + operation.symbol + num2 + "?");
if (userAnswer == answer) {
alert("correct");
} else {
alert("fail");
}
}
下面是上述内容的演示:对Alex W答案的评论移到这里:
除了Alex W的答案之外,您还尝试使用相等运算符(=
)而不是赋值运算符(=
)来赋值calcSort
),并且您正在全局范围(bad)中定义calcSort
。以下是一个有效的JSFIDLE:
另外,为了好玩,我想向您展示一下如何轻松地清理代码,使其更易于维护。对我来说,将calc
与数字进行比较的多个代码块是一种代码气味。我将每个calc
结果的所有逻辑隐藏到一个小助手对象数组中。然后您可以随机选择一个来自数组的操作。当您要添加另一个操作时,只需向操作
数组中添加一项即可:
function generate() {
var operations = [
{ symbol: '+', calc: function(a, b) { return a + b; }}, // 0
{ symbol: '*', calc: function(a, b) { return a * b; }}, // 1
{ symbol: '/', calc: function(a, b) { return a / b; }} // 2
];
var calc = Math.floor(Math.random() * operations.length + 1) - 1;
var operation = operations[calc];
var num1 = Math.floor(Math.random() * 10 + 1);
var num2 = Math.floor(Math.random() * 10 + 1);
var answer = operation.calc(num1, num2);
var userAnswer = prompt("What is " + num1 + operation.symbol + num2 + "?");
if (userAnswer == answer) {
alert("correct");
} else {
alert("fail");
}
}
这是上面的一个工作演示:另外,您尝试使用相等运算符(
=
)而不是赋值运算符(=
)来赋值calcSort
),并且您正在全局范围内定义calcSort
(错误)。这是一个有效的JSFIDLE:另外,您正在尝试使用相等运算符(==
)而不是赋值运算符(=
)来赋值calcSort
),并且您正在全局范围(bad)中定义calcSort
。这是一个有效的JSFIDLE: