JavaScript切换奇怪的行为

RIY*_*HAN 1 javascript function switch-statement

我有以下代码片段.

var caseObj = function () {

}

switch (typeof caseObj) {

    case "function":
        console.log("it is function");

    case "object":

        console.log("It is object now");
}
Run Code Online (Sandbox Code Playgroud)

它的输出是

it is function.
It is object now.
Run Code Online (Sandbox Code Playgroud)

但是typeof caseObj给出输出function但它仍然评估 案例"对象"的情况.

怎么可能?我做错了吗?

编辑:

typeof caseObj给予function,所以它执行该案件,但它也执行object案件.为什么这种奇怪的行为?

Tus*_*har 6

问题不在于typeof,但你错过break了案件中的陈述.这将成为case同样function OR object并执行两个案件的块.

你错过break;cases 的陈述.这就是下一次失败的原因case.

break语句终止当前的循环,开关或标签语句,并将程序控制转移到终止语句之后的语句.

var caseObj = function() {

}

switch (typeof caseObj) {

  case "function":
    document.write("it is function");
    break;

  case "object":

    document.write("It is object now");
    break;
}
Run Code Online (Sandbox Code Playgroud)

从答案中的评论:

但如果没有匹配的情况并且从switch退出,它也会没有中断.但它执行案例"对象":法规也是如此.为什么?

来自MDN

如果找到匹配项,程序将执行关联的语句.如果多个案例与提供的值匹配,则选择匹配的第一个案例,即使案例彼此不相等也是如此.

与每个案例标签关联的可选break语句可确保程序在执行匹配语句后突破switch,并在switch后的语句处继续执行.如果省略break,程序将继续执行switch语句中的下一个语句.