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?

智慧大石
浏览 1198回答 3
3回答

慕容森

把switch (result_time)改为switch (true)就行switch的用法:switch (expression)&nbsp; case value:&nbsp; &nbsp; statement;&nbsp; &nbsp; break;&nbsp; case value:&nbsp; &nbsp; statement;&nbsp; &nbsp; break;expression和value可以是值,也可以是表达式(表达式其实也是值,1 < 2 等价于 true),只要expression等于value就会执行相关语句比如:switch (1 < 2){&nbsp; &nbsp; case true:&nbsp; &nbsp; &nbsp; &nbsp; console.log('true');&nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; case false :&nbsp; &nbsp; &nbsp; &nbsp; console.log('false');&nbsp; &nbsp; &nbsp; &nbsp; break;}switch (true){&nbsp; &nbsp; case 1 < 2:&nbsp; &nbsp; &nbsp; &nbsp; console.log('true');&nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; case 1 > 2 :&nbsp; &nbsp; &nbsp; &nbsp; console.log('false');&nbsp; &nbsp; &nbsp; &nbsp; break;}上面两个代码其实是一样的

潇湘沐

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

白猪掌柜的

题主跑来提问题之前不会先搜一下文档么?MDN switch-case
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript