Javascript 开关故障

Javascript 开关故障,javascript,switch-statement,Javascript,Switch Statement,我有以下代码: var str = $("#datepicker").datepicker("getDate"); var datestr = str.toString().split(" "); switch(datestr[1]) { case "Jan": var datestrmon = "Яну"; break; case "Feb": var datestrmon = "Фев";

我有以下代码:

var str = $("#datepicker").datepicker("getDate");
    var datestr = str.toString().split(" ");
    switch(datestr[1]) {
        case "Jan":
        var datestrmon = "Яну";
        break;
        case "Feb":
        var datestrmon = "Фев";
        break;
        case "Mar":
        var datestrmon = "Мар";
        break;
        case "Apr":
        var datestrmon = "Апр";
        break;
        case "May":
        var datestrmon = "Май";
        break;
        case "Jun":
        var datestrmon = "Юни";
        break;
        case "July":
        var datestrmon = "Юли";
        break;
        case "Aug":
        var datestrmon = "Авг";
        break;
        case "Sep":
        var datestrmon = "Сеп";
        break;
        case "Oct":
        var datestrmon = "Окт";
        break;
        case "Nov":
        var datestrmon = "Ное";
        break;
        case "Dec":
        var datestrmon = "Дек";
        break;
        default:
        datestr[1];
    }
    alert(datestrmon);

我希望当浏览器提醒我datestrmon时会提醒我“ЮЮц”,但它会提醒我“未定义”。为什么?

尝试在案例之外定义
datestrmon
。下面是一些经过清理的代码。如果不起作用,请发布您的输入

var str = $("#datepicker").datepicker("getDate");
var datestr = str.toString().split(" ");
var datestrmon = "";

switch(datestr[1]) {
    case "Jan": {
     datestrmon = "Яну";
     break;
    }
    case "Feb": {
     datestrmon = "Фев";
     break;
    }
    case "Mar": {
     datestrmon = "Мар";
     break;
    }
    case "Apr": {
     datestrmon = "Апр";
     break;
    }
    case "May": {
     datestrmon = "Май";
     break;
    }
    case "Jun": {
     datestrmon = "Юни";
     break;
    }
    case "July": {
      datestrmon = "Юли";
      break;
    }
    case "Aug": {
     datestrmon = "Авг";
     break;
    }
    case "Sep": {
     datestrmon = "Сеп";
     break;
    }
    case "Oct": {
     datestrmon = "Окт";
     break;
    }
    case "Nov": {
     datestrmon = "Ное";
     break;
    }
    case "Dec": {
     datestrmon = "Дек";
     break;
    }
    default: {
     datestr[1];
    }
}
alert(datestrmon);

尝试在案例外部定义
datestrmon
。下面是一些经过清理的代码。如果不起作用,请发布您的输入

var str = $("#datepicker").datepicker("getDate");
var datestr = str.toString().split(" ");
var datestrmon = "";

switch(datestr[1]) {
    case "Jan": {
     datestrmon = "Яну";
     break;
    }
    case "Feb": {
     datestrmon = "Фев";
     break;
    }
    case "Mar": {
     datestrmon = "Мар";
     break;
    }
    case "Apr": {
     datestrmon = "Апр";
     break;
    }
    case "May": {
     datestrmon = "Май";
     break;
    }
    case "Jun": {
     datestrmon = "Юни";
     break;
    }
    case "July": {
      datestrmon = "Юли";
      break;
    }
    case "Aug": {
     datestrmon = "Авг";
     break;
    }
    case "Sep": {
     datestrmon = "Сеп";
     break;
    }
    case "Oct": {
     datestrmon = "Окт";
     break;
    }
    case "Nov": {
     datestrmon = "Ное";
     break;
    }
    case "Dec": {
     datestrmon = "Дек";
     break;
    }
    default: {
     datestr[1];
    }
}
alert(datestrmon);
  • 你确定是七月而不是七月吗
  • 您的
    默认值:
    案例未将
    datestr[1]
    分配给
    datestrmon
    。这是故意的吗
  • 无论如何,考虑使用查找表而不是大交换机。

    var datestrmon = ({"Jan": "Яну",
                       "Feb": "Фев",
                       ...
                       "Dec": "Дек"})[datestr[1]] || datestr[1];
    //                                            ^^^^^^^^^^^^^
    //                                            optional, if you think stuff outside of
    //                                            the table could appear and need a
    //                                            fallback.
    
  • 你确定是七月而不是七月吗
  • 您的
    默认值:
    案例未将
    datestr[1]
    分配给
    datestrmon
    。这是故意的吗
  • 无论如何,考虑使用查找表而不是大交换机。

    var datestrmon = ({"Jan": "Яну",
                       "Feb": "Фев",
                       ...
                       "Dec": "Дек"})[datestr[1]] || datestr[1];
    //                                            ^^^^^^^^^^^^^
    //                                            optional, if you think stuff outside of
    //                                            the table could appear and need a
    //                                            fallback.
    

    现在它没有提醒我什么你有没有试过用上面的括号。如果是这样,请将您的输入张贴到此处,我们可以查看一下-可能是案例不正确。上述操作应该有效。只是简单地解释一下为什么-当您放置“var datestrmon”来确定变量的范围时。因为您是在交换机中声明它的,所以一旦交换机完成,它就超出了范围,不再存在。通过将“var datestrmon”置于开关外部,它的作用域更广。@Nick:绝对错误var绑定到函数,而不是大括号。肯尼特:你完全正确。我对你的评论投了更高的票-我最近写了很多Java,一定是戴错帽子了。现在它没有提醒我什么。你试过上面的内容吗(带括号?)。如果是这样,请将您的输入张贴到此处,我们可以查看一下-可能是案例不正确。上述操作应该有效。只是简单地解释一下为什么-当您放置“var datestrmon”来确定变量的范围时。因为您是在交换机中声明它的,所以一旦交换机完成,它就超出了范围,不再存在。通过将“var datestrmon”置于开关外部,它的作用域更广。@Nick:绝对错误var绑定到函数,而不是大括号。肯尼特:你完全正确。我对你的评论投了更高的票——我最近写了很多Java,一定是戴错帽子了。