-6

有没有更简单的写法if(gender == 'm' || gender == 'f')

把它写成这样是理想的,if(gender == ('m' || 'f'))但这不起作用。用 JS 或 jQuery 编写这个的最佳方法是什么?

4

10 回答 10

7

最好的方法?用你有的方法,你能做到多简单?

if(gender == 'm' || gender == 'f')

其他任何事情只会使它更难理解。

不过,为了允许雌雄同体/跨性别者,请使用@kamituel :)

于 2013-09-03T13:23:30.267 回答
5

如前所述,每个人都有自己的方法。我主要在 Lua 中工作,使用这种方法:

allowed = { 'm': true, 'f': true }
if( allowed[gender] )
于 2013-09-03T13:28:05.413 回答
2

如果你真的想要,你可以写:

if ("mf".indexOf(gender) >= 0) { ...

但是,虽然更短,但我不认为更具可读性。此外,它会因gender===而中断mf(或者,正如评论中所建议的,这可能是您真正想要的东西)。

编辑:另外,您可能想使用:

if(gender === 'm' || gender === 'f')

代替

if(gender == 'm' || gender == 'f')

这篇文章为什么。

于 2013-09-03T13:24:12.997 回答
1
if (~"mf".indexOf(gender)) {
    // true
}

但是,除非你讨厌你的开发者伙伴,或者想要被讨厌,否则不要这样做。

于 2013-09-03T13:51:19.383 回答
1

您已经拥有的代码没有任何问题。

但是,为了满足您对较短代码和/或不重复变量名两次的代码的需求:

选项 1:声明switch

switch(gender) {
    case 'm' : ....
    case 'f' : ....
}

(不要忘记这些break陈述)

选项 2:数组或字符串映射:

var possibleGenders = ['m','f']; //or just = "mf", and use indexOf on the string, since we're dealing with a single char
if(possibleGenders.indexOf(gender) >=0) { .... }

选项 3:正则表达式(ewwww!不要这样做):

if(gender.match(/^[mf]$/)) { .... }

选项 4:使用布尔值而不是“m”或“f”:

因此,与其有一个gender变量,不如有一个isMale变量,设置为trueor false。这减少了其他地方所需的代码量,例如在此if()语句中。

于 2013-09-03T13:25:33.463 回答
1
  if (['m','f'].indexOf(gender) >= 0) {

    }
于 2013-09-03T13:24:37.013 回答
0

对于动态数量的选项,您可以执行以下操作:

var genderOpts = ['m','f'] //or more of course
for(var genderOpt in genderOpts)
    if(gender == genderOpt)
        return true;

return false;
于 2013-09-03T13:26:53.927 回答
0

你可以使用这个:

if(gender in { m:1, f:1 })

Butch 小心,如果性别是“构造函数”,它也返回 true。

于 2013-09-03T13:26:01.027 回答
0

至少在普通的javascript中没有。如果你有两个以上的值要比较,你总是可以使用一个数组([v1, v2, ...].indexOf(gender) != -1在javascript或gender in [v1, v2, v3]coffeescript中),但我觉得你的情况不值得麻烦。

如果您仍然觉得应该存在这样的功能,您可以随时在咖啡脚本项目上提出拉取请求,看看人们对它的看法!:-)

于 2013-09-03T13:26:10.330 回答
0
if(gender == 'm' || gender == 'f')

我认为这很简单。重要的不仅仅是编写简单的代码,而是编写易于理解的简单代码。

于 2013-09-03T13:28:52.073 回答