CodeQL 文档

重复的 switch case

ID: js/duplicate-switch-case
Kind: problem
Security severity: 
Severity: warning
Precision: very-high
Tags:
   - maintainability
   - correctness
   - external/cwe/cwe-561
Query suites:
   - javascript-security-and-quality.qls

单击查看 CodeQL 存储库中的查询

在 JavaScript 中,switch 语句中的 case 可以使用任意表达式作为其标签。解释器不会检查这些表达式是否都不同。在运行时,如果 switch 语句中的两个 case 具有相同的标签,则第二个 case 将永远不会执行。这很可能表示一个复制粘贴错误,其中第一个 case 被复制,然后没有被正确调整。

建议

检查这两个 case 以找出它们要检查的内容。如果 case 标签及其语句都相同,则第二个 case 是可以删除的重复代码。否则,需要调整第二个 case 标签。

示例

在下面的示例中,函数 controller 检查其参数 msg 以确定它要执行的操作。请注意,‘switch’ 语句有两个标签为 'start' 的 case;第二个 case 将永远不会执行。

function controller(msg) {
	switch (msg) {
	case 'start':
		start();
		break;
	case 'start':
		stop();
		break;
	default:
		throw new Error("Message not understood.");
	}
}

显然,第二个 case 应该标记为 'stop'

function controller(msg) {
	switch (msg) {
	case 'start':
		start();
		break;
	case 'stop':
		stop();
		break;
	default:
		throw new Error("Message not understood.");
	}
}
  • ©GitHub, Inc.
  • 条款
  • 隐私