Javascript 从提示符命令和if-else语句确定变量类型
我试着从一本书上写下这个练习: 编写一个程序,用提示符问自己2+2的值是多少 是如果答案是“4”,则使用alert来表示赞扬。如果是 是“3”还是“5”,说“差不多!”。在其他情况下,说一些有意思的话 我做了这样的尝试:Javascript 从提示符命令和if-else语句确定变量类型,javascript,Javascript,我试着从一本书上写下这个练习: 编写一个程序,用提示符问自己2+2的值是多少 是如果答案是“4”,则使用alert来表示赞扬。如果是 是“3”还是“5”,说“差不多!”。在其他情况下,说一些有意思的话 我做了这样的尝试: var input = "" || 'number' prompt ("How many is 2+2 ?", input) if (input = 4) print ("Awesome !"); else if (input = 3 || input = 5) pri
var input = "" || 'number'
prompt ("How many is 2+2 ?", input)
if (input = 4)
print ("Awesome !");
else if (input = 3 || input = 5)
print ("Close !");
else if (input = 'number'
print ("wrong number");
else if (input = 'random text')
print ("use numbers only!")
我知道这是错误的。这是我打算做的:
- 我需要确定
的类型,而不仅仅是值。我需要制作var
数字或字符串(根据var
)。为什么?对于typeof
输入,因为下面的提示
条件将基于输入的类型else if
- 我知道锻炼并没有要求它,但我想让它变得更好
=
是赋值,而=
测试是否相等。所以
a=4
将数字4分配给变量a。但是a==4
检查a是否等于4
因此,对于您的代码,您需要:
var input = "" || 'number'
prompt ("How many is 2+2 ?", input)
if (input == 4)
print ("Awesome !");
else if (input == 3 || input == 5)
print ("Close !");
else if (input == 'number')
print ("wrong number");
else if (input == 'random text')
print ("use numbers only!")
=
是分配<代码>=是比较
要将prompt
提供给您的字符串转换为数字,请使用parseInt(input,10)
——也就是说,JavaScript将为您进行类型转换,因此这里没有真正的需要。您甚至可以通过测试“仅使用数字”结果的isNaN(输入)
来判断用户输入的内容是否不是数字
比如说:
var input = parseInt(prompt("How much is 2 + 2?",""),10);
if( input == 4) alert("Awesome!");
else if( input == 3 || input == 5) alert("Almost!");
else if( input == 10) alert("No GLaDOS, we're working in Base 10 here.");
else if( input == 42) alert("That may be the answer to Life, the Universe and Everything, but it's still wrong.");
else if( isNaN(input)) alert("Use numbers only please!");
else alert("You are wrong!");
我个人建议:
var guess = parseInt(prompt('What is 2 + 2?'), 10);
switch (guess) {
case 4:
console.log('Well done!');
break;
case 3:
case 5:
console.log('Almost!');
break;
default:
console.log('Seriously? No.');
break;
}
或者,为了更加实用:
function answerMath (sum) {
var actual = eval(sum),
guess = parseInt(prompt('What is ' + sum + '?'),10);
if (guess === actual) {
console.log('Well done!');
}
else if (guess + 1 === actual || guess - 1 === actual) {
console.log('Almost!');
}
else {
console.log('Seriously? No.');
}
}
answerMath ('2*3');
请注意,虽然在这种情况下,
eval()
是我唯一能想到的将传递给函数的和作为字符串进行计算的方法,但我并不完全确定这是一个好的建议(尽管eval()
可能比它应得的压力更大,尽管它确实存在风险).我将以大卫·托马斯的答案为基础,因为如果你想做得更好,你可以很容易地把它变成一个小游戏
var numa = Math.round(Math.random() * (100 - 1) + 1);
var numb = Math.round(Math.random() * (100 - 1) + 1);
var answer = numa + numb;
var guess = parseInt(prompt('What is ' + numa + ' + ' + numb + '?'), 10);
switch (guess) {
case answer:
alert('Well done!');
break;
case (answer - 1):
case (answer + 1):
alert('Almost!');
break;
default:
alert('Seriously? No.');
break;
}
你可以做的进一步的事情是加入一个计时器,看看用户回答这个问题需要多长时间,并询问他们是否有办法在正确的时候再次播放
这里有一把小提琴:为了让你开始,你可以使用
=
来测试某个东西是否等于其他东西,而不是=
。实际上,使用=
;)提示符
输入始终是字符串。你是说typeof
还有什么吗?@IvanKuckir看起来很像我,就像Rapier在学习Javascript一样。找一个开关……很简单,你可以用正则表达式从求和中拉出运算符,然后用开关来计算。没错,但如果要操作的数字超过两个,那会很混乱(而且很快!)。