【问题标题】:Switch statement goes directly to default even with breaks即使有中断,switch 语句也会直接进入默认值
【发布时间】:2017-03-01 02:49:13
【问题描述】:

我正在尝试做的是创建一个 switch 语句,该语句从 JSON API 获取数据并根据用户的位置打印它。

例如,如果用户位于美国,那么它只打印城市和州。如果位于美国以外,它会打印城市和国家/地区。如果城市是一个空字符串,那么它只打印国家。

截至目前,无论我将 VPN 设置到哪个位置,它都会进入默认情况(城市和国家/地区)。

  var location;
  var city;
  var state;
  var country;

  $.getJSON("http://ipinfo.io", function(data) {
    console.log(data);
    location = data.loc;
    city = data.city;
    state = data.region;
    country = data.country;

    switch (data) {
      case country === 'US':
        $("#yourCity").html(city + ", " + state);
        break;
      case city === "":
        $("#yourCity").html(country);
        break;
      default:
        $("#yourCity").html(city + ", " + country);
    }

我选择使用 switch 语句而不是 if 语句,因为我可能想在以后添加更多案例。

任何帮助将不胜感激。

【问题讨论】:

  • 请参阅documentation。将要比较的值传递给switch(),并将可能的值用作cases。例如:switch(city) { case 'NY': codeHere; break; case 'NJ': codeHere; break; default: codeHere; }

标签: javascript jquery switch-statement


【解决方案1】:

您需要在 switch 语句中传递比 data 更具体的内容。由于data 是一个对象,而不是countrycity,它直接使用默认值。

我认为您认为当它通过案例时,它会查看对象并查看它是否具有价值国家或城市,但事实并非如此。您需要传递 switch(data.location) 之类的内容,然后 data.location 值是国家或城市。所以你可能需要稍微移动一下。希望这是有道理的!

【讨论】:

  • 感谢您的回复。我将data.country 分配给变量country 并传递了switch(country),但没有任何改变。我没听错吗?
  • 因此,当您在 switch(/*HERE*/) 中传递某些内容时,会检查该项目的值以防万一。由于您最初传递了数据 - 数据的价值是什么?它不清楚,所以你需要更具体。您将需要重新连接数据结构或重新考虑案例。如果您通过 data.country 您的案例应该说 case 'US' 。您要求 switch 语句检查更多内容。
【解决方案2】:

Switch-case 语句只能用于将一个值与其他几个值进行比较。根据您的代码示例,您尝试使用 switch case 比较国家和城市。这是不可能的,你肯定必须使用 if-else 语句来处理这个问题。

请考虑以下方法。

  var location;
  var city;
  var state;
  var country;

  $.getJSON("http://ipinfo.io", function(data) {
    console.log(data);
    location = data.loc;
    city = data.city;
    state = data.region;
    country = data.country;

    if(country === 'US'){
        $("#yourCity").html(city + ", " + state);
    }else{
        if(city===''){
            $("#yourCity").html(country);
        }else{
            $("#yourCity").html(city + ", " + country);
        }
    }

您还以错误的方式使用了 switch case 语句。 Switch case 语句没有算术比较符号。尝试如下 switch case 语句。

var day = new Date().getDay();
switch (day) {
    case 4:
    case 5:
        text = "Soon it is Weekend";
        break; 
    case 0:
    case 6:
        text = "It is Weekend";
        break;
    default: 
        text = "Looking forward to the Weekend";
} 

【讨论】:

  • 这很有意义。我最初使用 if 语句对其进行编码,但认为 switch 语句会起作用,因为可能有很多情况。但我不知道你不能与 switch 语句进行比较。谢谢!
【解决方案3】:

您没有正确使用开关盒。

基本上,您需要传递特定类型的data。目前,switch 变量既不是country 也不是city,因此它直接指向default

进一步阅读:

JavaScript Switch Statement

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多