Javascript 从提示符命令和if-else语句确定变量类型

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

我试着从一本书上写下这个练习:

编写一个程序,用提示符问自己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)
  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一样。找一个开关……很简单,你可以用正则表达式从求和中拉出运算符,然后用开关来计算。没错,但如果要操作的数字超过两个,那会很混乱(而且很快!)。