从prompt命令和if else语句确定var类型

时间:2013-08-22 20:21:40

标签: javascript

我正试图从一本书中写下这个练习:

  编写程序问自己,使用提示符,2 + 2的值是多少   是。如果答案是“4”,请使用警报说出赞美之词。如果它   是“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)。为什么?对于prompt输入,因为低于else if条件,将基于输入的类型。

  • 我知道运动没有问过,但我想让它变得更好。

4 个答案:

答案 0 :(得分:3)

=是作业。 ==是比较。

要将prompt为您提供的字符串转换为数字,请使用parseInt(input,10) - 也就是说,JavaScript将为您进行类型转换,因此这里没有实际需要。您甚至可以通过测试isNaN(input)的“仅使用数字”结果来判断用户是否输入了非数字的内容。

这样的事情:

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!");

答案 1 :(得分:3)

我个人建议:

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;
}

JS Fiddle demo

或者,更具功能性:

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');

JS Fiddle demo

请注意,虽然eval()只是 意味着我可以想到在这种情况下评估作为字符串传递给函数的总和,我不完全确定它是好的推荐(尽管eval()的压力比它应得的压力更大,但 存在风险)。

答案 2 :(得分:1)

在大多数编程语言中,=是赋值,==测试是否相等。所以

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!")

答案 3 :(得分:0)

我将以大卫托马斯的答案为基础,因为如果你想让它变得更好,你可以很容易地把它变成一个小游戏。

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;
}

你可以做的其他事情是包括一个计时器,看看用户花了多长时间来回答这个问题,然后问他们是否可以在他们正确的时候再玩一次。

这是一个小提琴:http://jsfiddle.net/6U6eN/