我如何知道何时使用 if 或 switch 语句?

How do I know when to use if or switch statement?

我想根据我的 url 参数构建我的 data 对象。

var $data = {};

if(params.assessmentId !== undefined){
    $data.assessmentId = params.assessmentId;
}
if(params.classroomId !== undefined){
    $data.classroomId = params.classroomId;
}
if(params.studentId !== undefined){
    $data.studentId = params.studentId;
}
if(params.courseContentId !== undefined){
    $data.courseContentId = params.courseContentId;
}

console.log($data);

我想先检查它们是否存在,然后进行相应的设置。

我拥有的足够好吗?

我应该改用 switch 语句吗?

switch 语句在您的情况下不会真正起作用,因为您一直在检查不同的键。 Switch 适用于单个值,因此您可以根据 courseContentId:

的值使用它来执行不同的操作
switch(params.courseContentId ) {
    case undefined:
        code block
        break;
    case 10:
        code block
        break;
    default:
        default code block
}

我不会使用 switch 或 if,但这段代码可以做同样的事情,而且更好:

var $data = {};
var params = {};
params.assessmentId = 11;

for (var n in params) {
    $data[n] = params[n]
}
console.log($data);

您只是将值从一个对象复制到另一个对象,因此您可以简单地遍历它并且您的 $data 对象将只接收在 params.

中设置的值

在您提供的示例中,您实际上并不需要所有 if 语句。只需按您的操作分配 $data 属性即可。如果 params 中的某些内容未定义,它将不会反映在您的 $data 对象上。

PS。 switch 语句不会以任何方式帮助您。 switch 语句用于根据 THE SAME 变量的多个可能值来分支代码。不是不同的。

Is what I have is good enough?

是的。

如果您希望它更短,请在预期的 属性 名称上使用循环。

Should I use a switch statement instead?

没有。 switch 语句具有完全不同的目的。

如果您只有这些数量的病例,那么看起来还可以!!但如果你有很多条件要检查,那么你会检查, 跳转到下一个子句,检查,跳转到下一个子句等等。

另一方面,对于 "switch",JVM 加载要比较的值并遍历值 table 以找到匹配项,这在大多数情况下速度更快。

注意:switch 语句并不总是比 if 语句快。它比一长串 if-else 语句的扩展性更好,因为 switch 可以根据所有值执行查找。但是,对于短暂的情况,它不会更快,可能会更慢。