JS中case语句后面除了可以跟常数之外还可以跟什么

<html><body><script>vari=3varnow=newDate();varday=now.getDay();switch(i){caseday:aler... <html>
<body>
<script>
var i=3
var now=new Date();
var day=now.getDay();
switch (i) {
case day: alert("3");
break;
case 30: alert("30");
break;
case 40: alert("40");
break;
default: alert("other");
}
</script>
</body>
</html>
</html>
我现在看的书中说case语句后面跟任意的常数表达式,可是我自己编了个上面的代码,case后面跟的是变量,照样能运行出正确的结果,求解释。
求高手透彻解释下switch case语法,谢了!
展开
 我来答
huibo865686
推荐于2017-10-08 · TA获得超过916个赞
知道小有建树答主
回答量:325
采纳率:80%
帮助的人:263万
展开全部

关于switch的用法,其实也就是类似if else的另外一种用法而已

具体的运行逻辑就是,

  1. 首先计算switch后边括号里面的表达式,得出一个值,

  2. 然后在机选每个case后边的表达式,进行对比,如果相等,就执行case冒号后边的逻辑,否则就计算下一个case后边的表达式

  3. 如果计算的case里面包含了break语句,则会跳出switch的语句

  4. 如果switch里面包含default语句,则不管switch计算的值是否与case里面的值匹配,都会执行,除非遇到break语句跳出

  5. case后边可以包含的语法就是一个正常的表达式,不一定是个常量,只要是正确的js表达式,都可以的

举个例子吧:

var id = 2;
var s = 1;
switch(id){//计算id的值
    case 2://计算常量
        alert('2 true');
    case 1 + 1://计算数字相加
        alert('1 + 1 true');
    case 1 * 2://计算数字相乘
        alert('1 * 2 true');
    case s * 2://计算变量
        alert('s * 2 true');
    default : //默认执行
        alert('default');
}

//具体的执行,就是这样
//1. 计算switch小括号里面的表达式,得出结果a
//2. 计算case后边的表达式,得出结果b
//3. 进行验证 a === b 如果相等,则执行case,否则跳过这个case,继续2步骤
//4. 强制中断switch语句可以用return , break这俩个关键字在case后边的执行语句里,
//   可以跳出switch的验证


//然后加上break语句
//这样,只要有一次可以匹配通过,就会跳出其他的判断条件和if else if else 差不多
switch(id){//计算id的值
    case 2://计算常量
        alert('2 true');
        break;
    case 1 + 1://计算数字相加
        alert('1 + 1 true');
        break;
    case 1 * 2://计算数字相乘
        alert('1 * 2 true');
        return ;//return也可以中断switch的case,并且会将整个方法中断
    case s * 2://计算变量
        alert('s * 2 true');
        break;
    default : //默认执行
        alert('default');
}


//一个简单的例子
function type(obj){
   switch(typeof obj){
       case 'string' : 
           return 'string';
       case 'function':
           return 'function';
       case 'object':
           return 'object';
       case 'number':
           return 'number';
   }
}

alert(type('字符串'));
jokeviner
2013-11-13 · TA获得超过186个赞
知道答主
回答量:97
采纳率:0%
帮助的人:49.2万
展开全部
case后面跟一个表达式,也可以这样(function(){return 1 +1 })(),只要返回值是变量,字符串,常量什么的就都行,
话句话说 var a = xxx; 这=号后面能跟什么case后面就都能跟
追问
谢谢你,我想要的就是这个答案。前面那个哥们先答的,而且看来费了不少功夫,就选他了。还是谢谢你!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式