碰到个奇怪的问题,switch 语句条件本来应该成立,但是确走了default,用 if 直接可以,这是为什么呢?

现在有三个 组件 ,A组件,B组件,C组件
当我从A组件跳转到B组件的时候,B组件写

    beforeCreate(){
      let status=this.$route.query.status;
       switch (status){
           case 1: document.title="生产监管火电明细"
               break;
           case 2: document.title="在线经营火电明细"
               break;
           case 3: document.title="生产监管水电明细";
               break;
           default:
           console.log(status == 1);
            document.title="我是没有执行";
               break;
       }
    },

浏览器的名字会变,但是我从B组件跳转到C组件的时候,在由C组件跳转到B组件的时候浏览器的名字变为了 - - (因为B组件的title的名字是动态的,所以我把初始值变为 --)

clipboard.png

所以现在的 switch 里面的等于1 的没有执行, 我在default里面打印的也返回true
为什么不执行呢?
我改为if语句就可以了,但是switch 里面 case等于1 为什么不执行呢?

    beforeCreate(){
        //改变浏览器title名字
        let status=this.$route.query.status;
        if(status == 1){
            document.title="生产监管火电明细"
        }else if(status == 2){
            document.title="在线经营火电明细"
        }else if(status == 3){
            document.title="生产监管水电明细"
        }
      },

这个问题我很好奇到底是什么原因导致的,

阅读 2.4k
2 个回答

因为你的 statsu 的值为字符串 "1", case 里面写的却是数字 1, case 使用 === 做的严格比较. if 语句则使用 == 做非严格比较, 会自动转换类型.

要么把 case 里面的数字全写成字符串, 要么 let status = parseInt(this.$route.query.status, 10);status 转成整型.

新手上路,请多包涵

case中要求的是常量,一般是不能进行逻辑判断的, 所以这也是if语句优于switch语句的地方!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题