为了账号安全,请及时绑定邮箱和手机立即绑定

本例用swtich出现的问题

<!DOCTYPE  HTML>
<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>函数</title>

<script type="text/javascript">

//定义函数
function big(x,y){
switch(x,y)
{case x>y:
    return x;
    break;
case x=y:
    return x;
    break;
case x<y:
    return y;
    break;
}
}
//函数体,判断两个整数比较的三种情况



 
//调用函数,实现下面两组数中,返回较大值。
  document.write(" 5 和 4 的较大值是:"+big(5,4)+"<br>");
  document.write(" 6 和 3 的较大值是:"+big(6,3) ); 




</script>
</head>
<body>
</body>
</html>

楼主尝试在switch()中,如果是switch(true),没问题。但是switch(x,y),有趣的是竟然显示的:4,3(明明较小的);switch(y,x)结果就成了未定义;

然后楼主去翻js高程的此部分,switch(expression){case:value:statement 。。。。。等,其中有提到:可以在switch语句中使用任何数据类型,无论字符串,还是对象都没有问题。其次,每个case的值不一定是常量,可以是变量,甚至表达式(也就是楼主所用的大小判断)。

那么,如何理解expression与value的呢?是否能理解为两者要求相等还是完全相等(类型)呢?

正在回答

4 回答

首先理解一下:当switch后表达式里出现x,y,那么跟随switch的大括号中出现的x和y(也就是所有case后的x和y)就不是你函数传的那两个形参x和y了,这是因为参数作用域。big(5,4)   big(6,3)  这两个由于switch后只看最右值,也就是只有y是有值的,x没有值,所以case x>y和case x<y都不执行,x没值啊,所以只有中间的case执行,case x=y     就是执行case后面的表达式“x=y”,注意,这是‘=’是赋值操作,也就是将y的值赋给x,此时x和y等值,返回谁都无所谓了(如果把中间的case语句x和y调一下顺序,改成y=x,那么由于x是没有值的,显示为undefined,再赋给y,y也成undefined了,此时就返回undefined)。至此,解释完毕

0 回复 有任何疑惑可以回复我~
#1

慕粉1301145735 提问者

挺有意思的,谢谢~
2018-02-27 回复 有任何疑惑可以回复我~
#2

慕圣1506026 回复 慕粉1301145735 提问者

客气喽
2018-02-27 回复 有任何疑惑可以回复我~

switch和case后面的东西,只看一个值,这是人家的机制

0 回复 有任何疑惑可以回复我~
#1

慕粉1301145735 提问者

=.=嗯,那看x的话,那就是switch(x)嘛,case x>y return x,怎么返回了Y(4)呢
2018-02-26 回复 有任何疑惑可以回复我~

你别急啊,我做一些测试

0 回复 有任何疑惑可以回复我~

可以是表达式这没问题,可是语法正确不代表代码做了你想要它做的事,你这里expression是x,y     逗号的意思是:它把以逗号分开的表达式依次执行一遍,然后返回最右边的表达式的值,不要想当然的写代码,还有,第二个case,要是==

0 回复 有任何疑惑可以回复我~
#1

慕粉1301145735 提问者

谢谢,我就是不懂你提到的x,y分开执行的过程,”然后返回最右边的表达式的值“如何理解,我不是太懂。big(5,4)执行操作后,是4.。。。。怎么办到的,我想了解过程呢
2018-02-26 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

本例用swtich出现的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信