javascript - jquery中switch和if中为什么推荐使用else if

标签 javascript jquery performance if-statement switch-statement

为什么这样做会更方便:

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 || .. .)

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

最佳答案

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

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

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

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 引擎上速度相当慢。不过,几年后情况不再如此。

关于javascript - jquery中switch和if中为什么推荐使用else if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15404079/

相关文章:

css - !important 对性能有害吗?

javascript - 无法绑定(bind)到 Leaflet 弹出窗口上的点击事件

javascript - 在我打开开发者工具之前,IE 不加载 XML 内容?

javascript - TypeError : . 映射不是函数

javascript - 获取不包括具有特定类的元素的元素的索引?

javascript - 具有不同域 src : how to disable the click but keep the hover intact 的 HTML iframe

javascript - 如何正确舍入 JavaScript 中的小数值

javascript - 无法使用 javascript 解决 No 'Access-Control-Allow-Origin' 错误

python - 在 numpy 数组中前向填充 NaN 值的最有效方法

performance - 带有许多选项卡的 Angularjs 和 MDI SPA 应用程序