当前位置: 首页 > 知识库问答 >
问题:

Javascript switch语句不起作用--三个太多了吗?[副本]

荀博
2023-03-14

我是Javascript的新手,正在尝试通过制作一个小程序来学习,在这个程序中输入占星星座、行星和房屋来制作一个madlibs类型的小故事。为此,我在一个函数中放入了三个switch语句。

不确定这是不是太多的switch语句,但是,当我在Chrome上加载它时,有时我只得到text,有时我得到text和text2,有时我只得到text3。

有人知道为什么会这样吗?我只是在一个函数中有太多switch语句吗?我在网上搜索,但找不到一个函数中允许有多少个。

function tellMeaStory() {
  var text;
  var text2;
  var text3;
  var sign = document.getElementById("mySign").value;
  var planet = document.getElementById("myPlanet").value;
  var house = document.getElementById("myHouse").value;

  switch(sign) {
    case "Aries", "aries":
      text = "red";
      break;
    case "Taurus", "taurus":
      text = "calm";
      break;
    case "Gemini", "gemini":
      text = "quirky";
      break;
    case "Cancer", "cancer":
      text = "moody";
      break;
    case "Leo", "leo":
      text = "hungry";
      break;
    default:
      text = "sign";
  }

  switch(planet) {
    case "Sun", "sun":
      text2 = "hero";
      break;
    case "Moon", "moon":
      text2 = "mother";
      break;
    case "Mercury", "mercury":
      text2 = "twin";
      break;
    case "Venus", "venus":
      text2 = "courtesan";
      break;
    case "Mars", "mars":
      text2 = "soldier";
      break;
    default:
      text2 = "planet";
  }

  switch(house) {
    case "one", "One":
      text3 = "hole";
      break;
    case "two", "Two":
      text3 = "buffet";
      break;
    case "three", "Three":
      text3 = "database";
      break;
    case "four", "Four":
      text3 = "stomach";
      break;
    case "five", "Five":
      text3 = "wilderness";
      break;
    default:
      text3 = "house";
  }
  document.getElementById("demo").innerHTML += "You are a " + text + " " + text2 + " in a " + text3;
}
<input id="mySign" type="text" value="Enter your sign">
<input id="myPlanet" type="text" value="Enter your planet">
<input id="myHouse" type="text" value="Enter your house">

<button onclick="tellMeaStory()">Generate</button>
<div id="demo"></div>

共有1个答案

夔学智
2023-03-14

您之所以看到奇怪的结果,是因为JavaScript处理逗号的方式。例如大小写“sun”,“sun”:不检查大小写是sun还是sun,它创建一个字符串“sun”“sun”进行比较。对switch语句没有限制,但是对于“大多数”情况来说,它们并不是很好。如果你想重写这个来检查多个拼写,你可以用两种方法中的一种,至少我能想到。

反转您的switch语句

  switch(true) {
case (planet.toUpperCase() === "SUN"):
  text2 = "hero";
  break;
case (planet.toUpperCase() === "MOON"):
  text2 = "mother";
  break;
case (planet.toUpperCase() === "MERCURY"):
  text2 = "twin";
  break;
case (planet.toUpperCase() === "Venus"):
  text2 = "courtesan";
  break;
case (planet.toUpperCase() === "MARS"):
  text2 = "soldier";
  break;
default:
  text2 = "planet";
}

或者可以使用一个if语句链,一起跳过开关。

if(planet === "sun" || planet === "Sun" || planet === "SUn") {
  // text assignment
}
if (planet.toLowerCase() === "sun") { 
  // text assignment 
}
 类似资料:
  • 我对JS有问题。我正在尝试制作三个按类型排序的配料列表(用于酿造药剂),所有这些都是标签中的复选框。 你应该选择(选中)三个列表中的每一个元素,以便酿造药水。如果你选择了正确的成分,然后按下“酿造药水”按钮,你就有了一种确定的药水,如果你选择三种不匹配的成分,它会显示 在页面底部写着“看来这次没用了!”按下“酿造药水”按钮后。 在JavaScript中,我对三个列表都使用了一个数组,对每个列表中的

  • 我有一些话题要讨论。我有一个24s/s的代码片段。是我自己的类,它表示类似于的功能。 这是一段代码: 我从可读性的角度考虑。是否最好将其更改为24个类并使用多态性?我不相信它会使我的代码可维护。。。一方面,那些if很清楚,应该不难理解,另一方面,if太多了。 我的问题相当笼统,但是我用Python编写代码,所以我不能使用像switch这样的构造。 你觉得呢? 更新: 一件重要的事情是、和是构造函数

  • 下面的代码确实可以按照我需要的方式工作,但是它很难看、太多或者其他一些事情。我看过一些公式,并试图写出一些解决方案,但最终得到的是类似数量的语句。 在这种情况下,有没有一种数学公式对我有利,或者16个if语句是可以接受的? 解释一下代码,这是一种同时回合制游戏。两个玩家各有四个动作按钮,结果来自一个数组(0-3),但如果这有帮助,变量'one'和'two'可以赋值任何值。结果是,0=两个都不赢,1

  • 问题内容: 我在存储过程中有以下代码。 NOT LIKE语句不起作用,是的,在有人说任何东西之前,COMMENT列中的项目不包含CORE,其他所有列都可以。 有谁知道这是怎么回事? 问题答案: 如果包含,则条件将不匹配。 该查询: 什么也不会返回。 在一列,两者并反对任何搜索字符串将返回。 您能否在一行中发布相关的值,您认为应该将其返回但不是?

  • 我有4个名为的表。我有 我正在组合起来,以便 中存在数据,则或中的数据 我怎样才能获得以上的功能?

  • 没什么好说的, 报警消息是而不是包含对象详细信息或类似信息的消息。 问题出在哪里?