【问题标题】:switch method returns only default valueswitch 方法只返回默认值
【发布时间】:2017-01-09 18:20:13
【问题描述】:

我正在尝试在我的应用程序中处理日期格式的多个条件,并为此目的使用 switch 方法。该功能看起来不错,但问题是我的情况下没有任何东西不起作用。我知道条件有问题,但无法理解到底是什么。

谁能告诉我我的错误在哪里?

 var dateSettings = function (value) {

        var timezone = localStorage.getItem('timezone');
        timezone = JSON.parse(timezone);

        var timeFormat = localStorage.getItem('timeFormat');
        timeFormat = JSON.parse(timeFormat);

        var dateFormat = localStorage.getItem('dateFormat');
        dateFormat = JSON.parse(dateFormat);

        switch( value ) {
            case (timezone === true && timeFormat === true && dateFormat === false):
                return value = moment.utc(value).format('MMM dd, yyyy HH:mm');

            case (timezone === true && timeFormat === false && dateFormat === false):
                return value = moment.utc(value).format('MMM dd, yyyy HH:mm:ss');

            case (timezone === false && timeFormat === false && dateFormat === false):
                return value = moment(value).format('MMM dd, yyyy HH:mm:ss');

            case (timezone === false && timeFormat === false && dateFormat === true):
                return value = moment(value).format('YYYY-MM-DD HH:mm:ss');

            case (timezone === false && timeFormat === true && dateFormat === true):
                return value = moment(value).format('YYYY-MM-DD HH:mm');

            case (timezone === true && timeFormat === false && dateFormat === true):
                return value = moment.utc(value).format('YYYY-MM-DD HH:mm:ss');

            default:
                return value = moment.utc(value).format('YYYY-MM-DD HH:mm');
        }
    };

【问题讨论】:

  • 你不应该像那样使用 switch case....如果你要进行检查,请使用 if/else if/else....

标签: javascript switch-statement


【解决方案1】:

switch-caseif-else 语句不同 - 这是您实际应该使用的。

case 必须仅依赖于 value

看看这个:http://www.w3schools.com/js/js_switch.asp

function switchCase(expression) {

    switch(expression) {
        case "a":
            console.log("This is an A");
            break;
        case "b":
            console.log("This is a B");
            break;
        default:
            console.log("DEFAULT");
    }
}

switchCase("a")
switchCase("banana")

您还返回了一个作业return value = ...,在我看来这不是很好的风格。

最好这样做:

value = 4;
return value;

这是你的样本,我会这样做:

var dateSettings = function(value) {

   var timezone = localStorage.getItem('timezone');
   timezone = JSON.parse(timezone);

   var timeFormat = localStorage.getItem('timeFormat');
   timeFormat = JSON.parse(timeFormat);

   var dateFormat = localStorage.getItem('dateFormat');
   dateFormat = JSON.parse(dateFormat);

   if (timezone === true && timeFormat === true && dateFormat === false) {
       value = moment.utc(value).format('MMM dd, yyyy HH:mm');
   } else if (timezone === true && timeFormat === false && dateFormat === false) {
       value = moment.utc(value).format('MMM dd, yyyy HH:mm:ss');
   } else if (timezone === false && timeFormat === false && dateFormat === false) {
       value = moment(value).format('MMM dd, yyyy HH:mm:ss');
   } else if (timezone === false && timeFormat === false && dateFormat === true) {
       value = moment(value).format('YYYY-MM-DD HH:mm:ss');
   } else if (timezone === false && timeFormat === true && dateFormat === true) {
       value = moment(value).format('YYYY-MM-DD HH:mm');
   } else if (timezone === true && timeFormat === false && dateFormat === true) {
       value = moment.utc(value).format('YYYY-MM-DD HH:mm:ss');
   } else {
       value = moment.utc(value).format('YYYY-MM-DD HH:mm');
   }
   return value;
};

【讨论】:

  • 是的,效果很好。我只是想我可以用switch方法替换这个语句
  • 你可以。有点奇怪:switch (true) {case (test1): expr1; break; case(test2): expr2; break; ...。见stackoverflow.com/questions/14118996/…
  • @ScottSauyet 酷,不知道这个 - 但它有点不常见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多