0

为什么会更方便:

var cnt = $("#div1 p").length;
alert(cnt);
if (cnt >= 10 && cnt <= 20)      alert('10');
else if (cnt >= 21 && cnt <= 30) alert('21');
else if (cnt >= 31 && cnt <= 40) alert('31');
else alert('>41');

代替:

switch (cnt) {
    case 1: ....
    case 2: ....
    case 3: ....
}

甚至

var cnt = $("#div1 p").length;
alert(cnt);
if (cnt >= 10 && cnt <= 20)      alert('10');
if (cnt >= 21 && cnt <= 30) alert('21');
if (cnt >= 31 && cnt <= 40) alert('31');
else alert('>41');

所以看起来如果有很多情况,switch语句看起来更干净。当你有多个值并且你想要相同的行为时,这也很好 - 只使用多个“case”语句,这些语句落入单个实现比 if( this || that || someotherthing || .. . )

那么对于几种情况,哪种选择更好?

4

3 回答 3

2

为了您的目的,该switch语句将进行更多比较,因为它只能测试严格等价 ( ===)。

但是if ... else if结构更好,因为它在第一个真表达式之后停止比较。它可能不适合某些情况,但它适合您的情况。

另外,作为次要建议,我建议将您认为最有可能成为真的条件放在首位。例如:

if (age >= 18 && age < 60) { // Mainstream
    ...
} else if (age >= 12 && age < 18) { // Smart kids
    ...
} else if (age >= 60 && age < 99) { // Savvy old people
    ...
} else { // ... Aliens?!
    ...
}

如上例所示,这最适用于互斥条件。如果这不是真的,它可能会导致混乱:

var t = $(element);
if (t.is("div > p")) {
    ...
} else if (t.is("p")) {
    ...
}

上面的例子不是一回事

var t = $(element);
if (t.is("p")) {
    ...
} else if (t.is("div > p")) {
    ...
}

因为t.is("div > p")t.is("p")不是相互排斥的。尝试将条件更改为这样,例如:t.is("p")=> t.is(":not(div) > p")

switch 通常最适合单例比较,例如:

var d = new Date().getDay(), t;
switch (d) {
    case 0: t = "Sunday"; break;
    case 1: t = "Monday"; break;
    case 2: t = "Tuesday"; break;
    ...
}

绝对比

var d = new Date().getDay(), t;
if (d === 0) t = "Sunday";
else if (d === 1) t = "Monday";
else if (d === 2) t = "Tuesday";
...

我听到的唯一反对使用switch单例比较的是,曾经switch在几个 Javascript 引擎上相当慢。不过,这已经不是几年了。

于 2013-03-14T08:17:54.370 回答
1

如果它们相互排斥,则使用else if而不是多个if语句基本上是一个好主意:

if(x >= 10 && x <= 20) { 
    ... 
} else if (x >= 21 && x <= 30) { ... }

这样,if只有第一个为假时,才会检查第二个。这是一个坏主意:

if(x >= 10 && x <= 20) { ... }
if (x >= 21 && x <= 30) { ... } // will be checked also if the 1st if is true

switch几乎不能用于值范围 ( x >= 21 && x <= 30),但更适合检查许多唯一值 (x===10x===11)。switch将在第一个之后停止执行break

switch(x){
    case 1:
        console.log("one");
    case 2:
        console.log("two");
        break;
    case 3:
        console.log("three");
        break;
}

输出取决于 的值x

  • 1:one two
  • 2:two
  • 3:three
  • 4:(无输出)

有关 switch 语句的更多信息可以在MDN上找到。

于 2013-03-14T08:22:32.950 回答
1

你也可以试试三元运算符:test? VALue_If_True_Statement:value_if_false_Statement;这是重构代码的好方法。

于 2013-03-14T08:28:18.170 回答