JavaScript 开关技术不好? [复制]

Posted

技术标签:

【中文标题】JavaScript 开关技术不好? [复制]【英文标题】:Bad technique on JavaScript switch? [duplicate] 【发布时间】:2016-01-24 04:37:24 【问题描述】:

javascript 可能是一种棘手的语言,有很多陷阱。在这个人为的例子中,一个简单的函数在一个开关中返回。没有中断,因为函数会立即返回。

function getUpperName (animal) 
    switch(animal) 
        case 'dog':
           return 'Dawg';
        case 'cat':
           return 'Kitty';
        default:
           return 'Unknown';
    

这是否被认为是不好的形式,是否会产生不必要的副作用?还是这个标准的JS编程。

【问题讨论】:

因为return直接return,不执行下面的,应该没问题。 【参考方案1】:

switch 中不使用 use break 是完全标准的,其行为是明确定义的。

例如:

[0, 1, 2, 3].map(function f(n) 
  var r = 0;
  switch(n) 
    case 2: ++r;
    case 1: ++r;
  
  return r;
); // [0, 1, 2, 0]

但是,大多数人认为这种行为是违反直觉的。所以他们更喜欢在case 的末尾跳出switch。所以他们使用break。如果你也想跳出这个功能,可以使用return

【讨论】:

【参考方案2】:

您的代码很好。在这种情况下,您不需要任何break,它不会适得其反。使用JSLint 检查您的代码始终是一个好习惯。

就我个人而言,我尽量让我的函数在函数末尾只返回一个返回值,因为这样更容易将日志语句添加到代码中。

【讨论】:

【参考方案3】:

没关系,这是一种常见的做法,因此您不会产生不必要的副作用,因为您实际上是通过返回调用者来离开函数。

另一个提示。有时,您甚至可以看到switch 声明的以下形式,这对我来说更清晰:

function getUpperName (animal) 
    switch(true) 
        case animal === 'dog':
           return 'Dawg';
        case animal === 'cat':
           return 'Kitty';
        default:
           return 'Unknown';
    

【讨论】:

以上是关于JavaScript 开关技术不好? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在sql查询中使用局部变量作为开关是不好的做法

如何在javascript中进行重载? [复制]

telecomadmin的超级密码是nE7jA%5m,我用这个登陆不好了路由器,提示密码错误

unity房间开门复制后就不能开了

javascript 数组的深度复制

VS的右键复制和复制快捷键不好使了