有没有更简单的写法if(gender == 'm' || gender == 'f')
?
把它写成这样是理想的,if(gender == ('m' || 'f'))
但这不起作用。用 JS 或 jQuery 编写这个的最佳方法是什么?
有没有更简单的写法if(gender == 'm' || gender == 'f')
?
把它写成这样是理想的,if(gender == ('m' || 'f'))
但这不起作用。用 JS 或 jQuery 编写这个的最佳方法是什么?
最好的方法?用你有的方法,你能做到多简单?
if(gender == 'm' || gender == 'f')
其他任何事情只会使它更难理解。
不过,为了允许雌雄同体/跨性别者,请使用@kamituel :)
如前所述,每个人都有自己的方法。我主要在 Lua 中工作,使用这种方法:
allowed = { 'm': true, 'f': true }
if( allowed[gender] )
如果你真的想要,你可以写:
if ("mf".indexOf(gender) >= 0) { ...
但是,虽然更短,但我不认为更具可读性。此外,它会因gender
===而中断mf
(或者,正如评论中所建议的,这可能是您真正想要的东西)。
编辑:另外,您可能想使用:
if(gender === 'm' || gender === 'f')
代替
if(gender == 'm' || gender == 'f')
看这篇文章为什么。
if (~"mf".indexOf(gender)) {
// true
}
但是,除非你讨厌你的开发者伙伴,或者想要被讨厌,否则不要这样做。
您已经拥有的代码没有任何问题。
但是,为了满足您对较短代码和/或不重复变量名两次的代码的需求:
选项 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
变量,设置为true
or false
。这减少了其他地方所需的代码量,例如在此if()
语句中。
if (['m','f'].indexOf(gender) >= 0) {
}
对于动态数量的选项,您可以执行以下操作:
var genderOpts = ['m','f'] //or more of course
for(var genderOpt in genderOpts)
if(gender == genderOpt)
return true;
return false;
你可以使用这个:
if(gender in { m:1, f:1 })
Butch 小心,如果性别是“构造函数”,它也返回 true。
至少在普通的javascript中没有。如果你有两个以上的值要比较,你总是可以使用一个数组([v1, v2, ...].indexOf(gender) != -1
在javascript或gender in [v1, v2, v3]
coffeescript中),但我觉得你的情况不值得麻烦。
如果您仍然觉得应该存在这样的功能,您可以随时在咖啡脚本项目上提出拉取请求,看看人们对它的看法!:-)
if(gender == 'm' || gender == 'f')
我认为这很简单。重要的不仅仅是编写简单的代码,而是编写易于理解的简单代码。