为什么JavaScript中的switch语句中的case没有自己的代码块?

时间:2018-10-27 06:34:04

标签: javascript switch-statement

在JavaScript内,我最近正在尝试使用switch语句在for-in循环中完成一些参数检查,但发现该语法与使用JavaScript中的代码块的主题不太一致。

我的示例数据如下:

var data = {
    one: "hello",
    two: "world"
}

我想象的switch语句看起来像是:

function isDataRoughlyMyExample(data) {
    if (typeof data !== "object") {
        return false;
    }
    let count = 0;
    for (const name in data) {
        count++;
        switch (name) {
            case "one", "two" {
                if (typeof data[name] !== "string") {
                    return false;
                }
            }
            default {
                return false;
            }
        }
    }
    if (count === 0) {
        return false;
    } else {
        return true;
    }
}

然而,JavaScript似乎通过使代码块使用空格来提高代码的可读性来遵循python的一般主题

function isDataRoughlyMyExample(data) {
    if (typeof data !== "object") {
        return false;
    }
    let count = 0;
    for (const name in data) {
        count++;
        stuff: switch (name) {
            case "one":
            case "two":
                if (typeof data[name] !== "string") {
                    return false;
                }
                break stuff;
            default:
                return false;
        }
    }
    if (count === 0) {
        return false;
    } else {
        return true;
    }
}

为澄清起见,我在问为什么switch语句以它们的方式工作。我知道由于JavaScript对向后兼容性的热爱,不太可能更改它,但确实使我感到困惑,为什么会这样。

1 个答案:

答案 0 :(得分:0)

这也是switch在其他几种语言中的工作方式/外观(最值得注意的是C)。因此,添加这些代码块将增加混乱,而不是减少混乱。