js switch奇怪的问题

var result_time = 45852221;
var simple_text;

switch (result_time) {

    case result_time < 60:

        simple_text =  '刚刚';

        break;


    case  result_time > 60 && result_time < 3600 : //分钟前

        simple_text = Math.round(result_time/60)+'分钟前';


        break;


    case  result_time > 3600 && result_time < 86400 : //小时前

        simple_text = Math.round(result_time/60/24)+'小时前';

        break;

    case  result_time > 86400 && result_time < 2592000 : //天前

        simple_text = Math.round(result_time/60/60/24)+'天前';


        break;

    case  result_time > 2592000 && result_time < 31104000 : //月前

        simple_text = Math.round(result_time/60/60/24/30)+'月前';


        break;


    case  result_time > 31104000: //年前

        simple_text = Math.round(result_time/60/60/24/30/12)+'年前';


        break;
}
document.write(simple_text)

如上图所示,这是一个简化时间的判断语句,为什么它判断不出任何case?

阅读 2.9k
3 个回答

switch (result_time)改为switch (true)就行

switch的用法:

switch (expression)
  case value:
    statement;
    break;
  case value:
    statement;
    break;

expressionvalue可以是值,也可以是表达式(表达式其实也是值,1 < 2 等价于 true),
只要expression等于value就会执行相关语句

比如:

switch (1 < 2)
{
    case true:
        console.log('true');
        break;
    case false :
        console.log('false');
        break;
}
switch (true)
{
    case 1 < 2:
        console.log('true');
        break;
    case 1 > 2 :
        console.log('false');
        break;
}

上面两个代码其实是一样的

因为switch-case根本不是这么用的,case里的是值而不是布尔表达式。这样你的每个case都是一个布尔值:truefalse,而result_time既不是true也不是false,当然判断不出来。只能用if-else,或者根据具体规则手动写表达式判断。

题主跑来提问题之前不会先搜一下文档么?

MDN switch-case

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