switch方法仅返回默认值

时间:2017-01-09 18:20:14

标签: javascript switch-statement

我试图在我的应用中处理日期格式的多个条件并使用此目的切换方法。功能看起来不错,但问题是我的案例没有任何内容。条件不起作用。我明白条件有问题但却无法理解究竟是什么。

有人能告诉我我的错误在哪里吗?

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

1 个答案:

答案 0 :(得分:2)

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