调用API返回值匹配switch case失效问题排查(已校验类型)
解决Switch Case匹配字符串失效的问题
你的代码里if能匹配到"Resistor"但switch走default,核心原因大概率是字符串包含不可见的空白字符(比如前后空格、换行符、制表符),导致switch的严格全等匹配失败。
排查步骤
先打印字符串的长度和转义后的内容,确认是否有多余字符:
const resultString = String(response.data.body); console.log('字符串长度:', resultString.length); console.log('转义后内容:', JSON.stringify(resultString));
比如如果后端返回的是带空格的" Resistor",JSON.stringify会输出"\" Resistor\"",长度是8(正常"Resistor"长度是7)。
解决方法
1. 清理前后空白字符
用trim()方法去掉字符串前后的空白:
const resultString = String(response.data.body).trim(); // 后续的if和switch逻辑保持不变 if (resultString === "Resistor") { console.log("It is of 'string' type"); } else { console.log("It is not of 'string' type"); } let value; switch (resultString) { case 'Achiever': value = 10; break; case 'Initiator': value = 8; break; case 'Supporter': value = 6; break; case 'Follower': value = 4; break; case 'Resistor': value = 2; break; default: console.log('Unexpected value for response.data.body:', resultString); value = 0; }
2. (可选)统一大小写
如果担心后端返回的字符串大小写不一致,可以先转成小写(或大写)再匹配:
const resultString = String(response.data.body).trim().toLowerCase(); let value; switch (resultString) { case 'achiever': value = 10; break; case 'initiator': value = 8; break; case 'supporter': value = 6; break; case 'follower': value = 4; break; case 'resistor': value = 2; break; default: console.log('Unexpected value for response.data.body:', resultString); value = 0; }
内容的提问来源于stack exchange,提问作者S D
相关产品推荐
相关产品推荐

