Switch语句未返回值

时间:2018-07-28 20:45:03

标签: javascript switch-statement

我第一次使用{ 'ListOrderItemsResponse':{ '@xmlns':'https://mws.amazonservices.com/Orders/201 3-09-01', 'ListOrderItemsResult':{ 'OrderItems':{ 'OrderItem':{ 'QuantityOrdered ':'1', 'Title':'Delta Rothko Rolling Bicycle Stand', 'ConditionId':'New', 'Is Gift':'false', 'ASIN':'B00XXXXTIK', 'SellerSKU':'9934638', 'OrderItemId':'49 624373726506', 'ProductInfo':{ 'NumberOfItems':'1' }, 'QuantityShipped':'0', 'C onditionSubtypeId':'New' } }, 'AmazonOrderId':'112-9XXXXXX-XXXXXXX' }, 'ResponseM etadata':{ 'RequestId':'8XXXXX8-0866-44a4-96f5-XXXXXXXXXXXX' } } } ,但在返回任何内容时遇到了一些麻烦。作为测试,我要获取一个字符串,并根据所测试的字符,控制台记录一些字符串输出。

switch

这些案例具有相同的值类型,所以我不确定我在做什么错。任何帮助将非常感激。

4 个答案:

答案 0 :(得分:6)

根据您在switch语句中处理的值,您的测试无效。您仅处理AG的案件,但您通过了ACG。如果指定的任何一种情况都不匹配,Switch将无路可走,因为您还缺少默认的情况。在以下情况下,您的测试将有效:

function pairElement(str) {
switch (str) {
    case "A":
    console.log("some things")
    break;
    case "G":
    console.log("some more things")
    break;
}
}
pairElement("A"); // some things - valid
pairElement("G"); // some more things - valid
pairElement("ACG"); // switch case and no default - NOT valid

添加默认设置将为您提供

function pairElement(str) {
switch (str) {
    case "A":
    console.log("some things")
    break;
    case "G":
    console.log("some more things")
    break;
    default:
    console.log("something ELSE")
}
}
pairElement("A"); // some things  - valid
pairElement("G"); // some more things - valid
pairElement("ACG"); // something ELSE - valid

现在还有一个问题,当您测试多字符串与单字符串时,您究竟期望什么?在处理开关中的单个字符时,您可能会希望传递给函数的字符串是逐个字符tested个char,如果这样,则需要声明,因为这会改变问题/要求。

针对需要按字符进行字符更新的情况:

function pairElement(str) {
	str.split('').forEach(function(v) {
		switch (v) {
			case "A":		
			console.log("some things")
			break;
			case "G":
			console.log("some more things")
			break;
			default:
			console.log("something ELSE")
		}
	}
)
}
pairElement("ACG"); 
// some things
// something ELSE
// some more things

答案 1 :(得分:4)

您应该添加一个 default 案例,因为您传递的是“ ACG”(无论如何)。任何编程语言的开关都需要匹配的大小写。

演示

function pairElement(str) {
switch (str) {
    case "A":
    console.log("some things")
    break;
    case "G":
    console.log("some more things")
    break;
    default:
    console.log("some things + some more things")
}
}
pairElement("ACG"); 

 

答案 2 :(得分:2)

您传入的字符串长度为三,首先要进行修改。第二种情况是,如果您遇到的任何情况都符合您希望的标准(目前就是这种情况),则必须进行默认评估。

cljs.js/empty-state

检查MDN Switch信息

答案 3 :(得分:1)

交换机使用严格的比较(===,换句话说,它必须完全匹配),因此在这种情况下,“ ACG”与“ A”或“ G”不完全匹配,并且由于没有完全匹配的开关,因此不执行任何操作。 / p>

为“ ACG”添加一个大小写,以在传递“ ACG”时使开关执行某些操作。您还可以添加默认案例,如果没有其他匹配项,则交换机将执行该案例:

function pairElement(str) {
  switch (str) {
    case "A":
      console.log("some things")
      break;
    case "G":
      console.log("some more things")
      break;
    case "ACG":
      console.log("ACG exactly matches this case")
      break;
    default:
      console.log("nothing matched so default executed");
      break;
  }
}

pairElement("A"); // some things
pairElement("G"); // some more things
pairElement("ACG"); // ACG exactly matches this case
pairElement("this won't match anything"); // nothing matched so default executed