Javascript - 是否有可能有3个«if»变量或者它是一个错误?

时间:2014-02-24 21:26:32

标签: javascript html debugging if-statement var

我是一名新的JavaScript程序员,我最近正在创建一个用户ID页面(基本上它表示你的名字长度,你的年龄,并且据说是你的标志。

现在的问题是,当我创建标志部分(功能mySigno())时,我插入了2个可能的月份(Janeiro - 1月和Fevereiro - 2月),但我为Março插入了相同的«if» - March,该功能甚至不起作用。

<center><button type="button" onclick="mySigno()">Qual é o meu signo?</button></center>

<script>
  function mySigno()
  {
    var Signo_baseado_no_mes = prompt("Em que mês nasceste? (ex.: Julho)")

    if(Signo_baseado_no_mes === "Janeiro")
    {
      var Signo_no_mes_de_Janeiro = prompt("Em que dia de Janeiro nasceste? (ex.: 16)")
    }

    if(Signo_no_mes_de_Janeiro <= 20)
    {
      alert("O teu signo é Capricórnio!")
    }

    if(Signo_no_mes_de_Janeiro >= 21)
    {
      alert("O teu signo é Aquário!")
    }

    if(Signo_baseado_no_mes === "Fevereiro")
    {
      var Signo_no_mes_de_Fevereiro = prompt("Em que dia de Fevereiro nasceste? (ex.: 18)")
    }

    if(Signo_no_mes_de_Fevereiro <= 19)
    {
      alert("O teu signo é Aquário!")
    }

    if(Signo_no_mes_de_Fevereiro >= 20)
    {
      alert("O teu signo é Peixes!")
    }

    if(Signo_baseado_no_mes === "Março")
    {
      var Signo_no_mes_de_Março = prompt("Em que dia de Março nasceste? (ex.: 4)")
    }

    if(Signo_no_mes_de_Março <= 20)
    {
      alert("O teu signo é Peixes!")
    }

    if(Signo_no_mes_de_Março >= 21)
    {
      alert("O teu signo é Áries!")
    }
  }
</script>

在笑了我的代码后,请尝试解释有什么问题,谢谢!

P.S。:对于所有葡萄牙语的东西感到抱歉,在回答时将文本更改为英语没有问题(并且对于可能的不良英语也很抱歉)。

2 个答案:

答案 0 :(得分:2)

您问题的直接答案是您可以在JavaScript中使用尽可能多的if语句。但是,您应该意识到,在您的示例中,它正在评估if语句中的每一个。

由于每个月后面的两个语句只需要在那个月使用,你应该将它们放在if语句中:

if(Signo_baseado_no_mes === "Janeiro")
{
  // only do these things if Janeiro
  var Signo_no_mes_de_Janeiro = prompt("Em que dia de Janeiro nasceste? (ex.: 16)")


  if(Signo_no_mes_de_Janeiro <= 20)
  {
      alert("O teu signo é Capricórnio!")
  }
  if(Signo_no_mes_de_Janeiro >= 21)
  {
      alert("O teu signo é Aquário!")
  }

 }

这并不能解决无法正常工作的问题,但至少会运行最少量的代码。还要记住,JavaScript会创建在if语句中声明的变量,即使您没有找到它们也是如此。这会自动发生。它现在不应该是你的代码中的一个问题,但是如果你有两个用'var'声明的同名变量,即使它们被if块分隔,它也会出错。

最后,因为你说===“Janeiro”和类似的,用户的输入必须完全匹配。大写必须是相同的,否则它将不匹配!

答案 1 :(得分:2)

稍微重构了你的代码 - 它现在按预期工作。第二个@ jgitter的观点也是如此。

function mySigno() {   
  var msg = 'Em que dia de %s nasceste? (ex.: 16)';
  var month = window.prompt('Em que mês nasceste? (ex.: Julho)');
  var day = window.prompt(msg.replace(/%s/, month));
  day = parseInt(day, 10);

  switch (month) {
  case 'Janeiro':
  case 'janeiro':
    if (day <= 20) {
      window.alert('O teu signo é Capricórnio!');
    } else {
      window.alert('O teu signo é Aquário!');
    }
    break;
  case 'Fevereiro':
  case 'fevereiro':
    if (day <= 19) {
      window.alert('O teu signo é Aquário!');
    } else {
      window.alert('O teu signo é Peixes!');
    }
    break;
  case 'Março':
  case 'março':
    if (day <= 20) {
      window.alert('O teu signo é Peixes!');
    } else {
      window.alert('O teu signo é Áries!');
    }
    break;
  }
}