【问题标题】:Switch(true) always displays the default caseSwitch(true) 总是显示默认情况
【发布时间】:2019-05-19 17:46:51
【问题描述】:

我用 javascript 编写了一个程序,在输入出生日期后计算一个人的年龄。年龄检查工作正常,但我遇到了 switch(true) 案例。我试图将输入限制为某些数字,因为月份的值不能超过 12,并且根据月份,一天不能超过一定的数量。

我尝试在 if 语句中编写相同的代码。它仍然不起作用。

do {
    var geboorte_datum = prompt("Voer uw leeftijd in(DD/MM/YYYY)");
    var age = getAge(geboorte_datum);
    var delen = geboorte_datum.split('/');
    var geboorte_dag = delen[0];
    var geboorte_maand = delen[1];
    var geboorte_jaar = delen[2];
    switch (true) {
        case (delen[1] === 1 && delen[0] > 31):
        case (delen[1] === 2 && delen[0] > 28 && (Number.isInteger(delen[2] / 4) === "false")):
        case (delen[1] === 2 && delen[0] > 29 && (Number.isInteger(delen[2] / 4) === "true")):
        case (delen[1] === 3 && delen[0] > 31):
        case (delen[1] === 4 && delen[0] > 30):
        case (delen[1] === 5 && delen[0] > 31):
        case (delen[1] === 6 && delen[0] > 30):
        case (delen[1] === 7 && delen[0] > 31):
        case (delen[1] === 8 && delen[0] > 31):
        case (delen[1] === 9 && delen[0] > 30):
        case (delen[1] === 10 && delen[0] > 31):
        case (delen[1] === 11 && delen[0] > 30):
        case (delen[1] === 12 && delen[0] > 31):
        case (delen[1] > 12):
            alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
            break;
        case (age > 17):
            alert("U heeft nog geen toegang tot deze site.");
            break;
        default:
            alert("Welkom.");
    }
}
while (geboorte_maand === 12 && geboorte_dag > 31 || geboorte_maand === 11 && geboorte_dag > 30 || geboorte_maand === 10 && geboorte_dag > 31 || geboorte_maand === 9 && geboorte_dag > 30 || geboorte_maand === 8 && geboorte_dag > 31 || geboorte_maand === 7 && geboorte_dag > 31 || geboorte_maand === 6 && geboorte_dag > 30 || geboorte_maand === 5 && geboorte_dag > 31 || geboorte_maand === 4 && geboorte_dag > 30 || geboorte_maand === 3 && geboorte_dag > 31 || geboorte_maand === 2 && geboorte_dag > 29 && (geboorte_jaar / 4).isInteger() || geboorte_maand === 1 && geboorte_dag > 31 || geboorte_maand === 2 && geboorte_dag > 29 && ((geboorte_jaar / 4).isInteger() === "false") || geboorte_maand > 12);

以及我对 if 语句的尝试:

    var geboorte_datum = prompt("Voer uw leeftijd in(DD/MM/YYYY)");
    var age = getAge(geboorte_datum);
    var delen = geboorte_datum.split('/');
    var geboorte_dag = delen[0];
    var geboorte_maand = delen[1];
    var geboorte_jaar = delen[2];
    if (delen[1] === 1 && delen[0] > 31) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 2 && delen[0] > 28 && (Number.isInteger(delen[2] / 4) === "false")) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 2 && delen[0] > 29 && (Number.isInteger(delen[2] / 4) === "true")) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 3 && delen[0] > 31) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 4 && delen[0] > 30) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 5 && delen[0] > 31) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 6 && delen[0] > 30) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 7 && delen[0] > 31) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 8 && delen[0] > 31) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 9 && delen[0] > 30) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (geboorte_maand === 10 && geboorte_dag > 31) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 11 && delen[0] > 30) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] === 12 && delen[0] > 31) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }
    if (delen[1] > 12) {
        alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
    } else if (age < 18) {
        alert("U heeft helaas nog geen toegang tot deze site.")
    } else {
        alert("Welkom.")
    }

当输入超过天数或月数时,我希望输出显示警报。对于每个月,我添加了该月可以有多少天。但是 switch(true) 的结果始终是默认值。 if 语句代码也不起作用。

【问题讨论】:

  • 顺便说一句,Number.isInteger 返回一个布尔值,而不是一个字符串。

标签: javascript if-statement switch-statement


【解决方案1】:

您的“日期”不是数字,而是字符串。因为您使用的是严格相等 (===) 所以 '21' !== 21 然而 '21' == 21

一般来说,大多数人会鼓励严格相等,因此您可能只需要先使用parseInt() 函数将字符串转换为数字。

如果您运行 typeof delen[0],您应该会看到它是一个字符串 - 您需要它是一个数字才能使任何代码工作。

【讨论】:

  • 感谢您的评论!我创建了一个名为 day 的新变量和一个名为 month 的变量。 var day = parseInt(geboorte_dag, 10); var 月 = parseInt(geboorte_maand, 10);我在我的案例陈述中使用了这些变量。错误月份的案例陈述现在有效,但年龄检查本身似乎已停止运作。
  • Olaf,您没有提供getAge() 的源代码,所以请尝试console.log(age)age 有什么价值?
【解决方案2】:

你的代码有很多问题!

  • Number.isInteger(delen[2] / 4) === "false" 无法工作,因为您将布尔值与字符串进行比较。
  • delen[1] 也一样。

你可以简单地做这样的事情:

function getAge(dateStr) {
  var delen = dateStr.split('/');
  var geboorte_dag = Number(delen[0]);
  var geboorte_maand = Number(delen[1]);
  var geboorte_jaar = Number(delen[2]);

  return new Date().getFullYear() - new Date(geboorte_jaar, geboorte_maand, geboorte_dag).getFullYear(); // Not exactly...
}

function isValidDate(dateStr) {
  var delen = (dateStr || '').split('/');
  var geboorte_dag = Number(delen[0]);
  var geboorte_maand = Number(delen[1]);
  var geboorte_jaar = Number(delen[2]);
  var schrikkel_jaar = Number.isInteger(geboorte_jaar / 4);
    
  return ((geboorte_maand === 1 && geboorte_dag <= 31)
  || (geboorte_maand === 2 && geboorte_dag <= 29 && schrikkel_jaar)
  || (geboorte_maand === 2 && geboorte_dag <= 28 && !schrikkel_jaar)
  || (geboorte_maand === 3 && geboorte_dag <= 31)
  || (geboorte_maand === 4 && geboorte_dag <= 30)
  || (geboorte_maand === 5 && geboorte_dag <= 31)
  || (geboorte_maand === 6 && geboorte_dag <= 30)
  || (geboorte_maand === 7 && geboorte_dag <= 31)
  || (geboorte_maand === 8 && geboorte_dag <= 31)
  || (geboorte_maand === 9 && geboorte_dag <= 30)
  || (geboorte_maand === 10 && geboorte_dag <= 31)
  || (geboorte_maand === 11 && geboorte_dag <= 30)
  || (geboorte_maand === 12 && geboorte_dag <= 31));
}

var geboorte_datum = prompt("Voer uw leeftijd in(DD/MM/YYYY)");

if (!isValidDate(geboorte_datum)) {
  alert("U heeft uw geboortedatum verkeerd ingevuld. Probeer het opnieuw.");
} else if (getAge(geboorte_datum) < 18) {
  alert("U heeft helaas nog geen toegang tot deze site.");
} else {
  alert("Welkom.");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多