【问题标题】:Different outputs using switch and if else statements in JavaScriptJavaScript 中使用 switch 和 if else 语句的不同输出
【发布时间】:2018-02-18 11:29:19
【问题描述】:

我是学习编程的初学者,尤其是 JavaScript。我在学习编码时遇到了一个小问题。当我使用 switch 语句来解决一个问题时,它会产生正确的输出。

var dateNow = 3;
var dateSuffix;

switch (dateNow) {
  case 1:
  case 21:
  case 31:
    dateSuffix = "st";
    break;
  case 2:
  case 22:
    dateSuffix = "nd";
    break;
  case 3:
  case 23:
    dateSuffix = "rd";
    break;
  default:
    dateSuffix = "th";
    break;
}

console.log("Today is the " + dateNow + dateSuffix + " day.");
    

但是当我对 if else 语句做同样的事情时,输出是错误的。

var dateNow = 3;
var dateSuffix;

if (dateNow == 1 || 21 || 31) {
  dateSuffix = "st";
} else if (dateNow == 2 || 22) {
  dateSuffix = "nd";
} else if (dateNow == 3 || 23) {
  dateSuffix = "rd";
} else {
  dateSuffix = "th";
}

console.log("Today is " + dateNow + dateSuffix + " day of the month...");

谁能指出我的 if 语句的问题?

【问题讨论】:

标签: javascript if-statement


【解决方案1】:

你不能使用dateNow == 1 || 21 || 31

你需要使用[1,21,31].includes(dateNow)

dateNow == 1 || dateNow == 21 || dateNow == 31

var dateNow = 3;
var dateSuffix;

if ([1,21,31].includes(dateNow)) {
  dateSuffix = "st";
} else if ([2,22].includes(dateNow)) {
  dateSuffix = "nd";
} else if ([3,23].includes(dateNow)) {
  dateSuffix = "rd";
} else {
  dateSuffix = "th";
}

console.log("Today is " + dateNow + dateSuffix + " day of the month...");

【讨论】:

    【解决方案2】:

    更新:正如@Xufox 指出的那样,这个答案不正确。这是错误的。

    除了@Zenoo的回答,我还用这段代码测试过:

    dateNow = 2
    
    console.log(dateNow == 1)
    console.log(dateNow == 1 || 2)
    
    console.log(true == 0)
    console.log(true == 1)
    console.log(true == 2)
    

    结果:

    false
    2
    false
    true
    false
    

    我的解释是dateNow == 1 || 2 被视为(dateNow == 1) || 2,正如我们所见,这是错误的。

    【讨论】:

    • 不,dateNow == 1 || 2 永远不是false。是true2
    • 但值 2 被视为假,正如我们在最后一个测试“案例”中看到的那样。
    • 不,这是完全错误的。 false == 2 不是 true== 将布尔值强制转换为数字,因此您最终将比较 1 === 2,这当然是错误的。 Boolean(x)true 对于每个 非零和非 NaN 数字 x
    • 哦,好吧。那么这个答案就是垃圾,对不起。
    【解决方案3】:

    var dateNow = 3;
    var dateSuffix;
    
    if (dateNow == 1 || dateNow ==21 || dateNow ==31) {
      dateSuffix = "st";
    } else if (dateNow == 2 || dateNow ==22) {
      dateSuffix = "nd";
    } else if (dateNow == 3 || dateNow ==23) {
      dateSuffix = "rd";
    } else {
      dateSuffix = "th";
    }
    
    console.log("Today is " + dateNow + dateSuffix + " day of the month...");
    我替换了你的代码
    if (dateNow == 1 || 21 || 31) {
    

    with is code if (dateNow == 1 || dateNow ==21 || dateNow ==31) { 你的代码只有在条件下才会触发 这段代码会帮助你

    【讨论】:

    • 完全没有解释?
    • @Xufox 我加了先生。
    • “您的代码仅在条件下才触发”是什么意思?确实如此,但关于为什么会发生这种情况的解释并不完整。还是您的意思是|| 链中的第一个操作数?那是不正确的。
    • @Xufox 好的,我明白了。
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多