我在javascript中有以下IF语句:
if ( !(cmd === 'JustifyLeft' || cmd === 'JustifyRight' || cmd === 'JustifyCenter' || cmd === 'JustifyFull') )
有关如何以更清洁的方式撰写的任何建议吗?
由于
答案 0 :(得分:17)
if(!cmd.match(/^Justify(Left|Right|Center|Full)$/))
在回复一些评论时,您还可以模仿与小编辑的严格比较:
if( typeof cmd != 'String' || !cmd.match(/^Justify(Left|Right|Center|Full)$/))
这将以与当前代码完全相同的方式作出反应,忽略任何不是字符串的内容。
我个人认为你不太可能需要它。
答案 1 :(得分:4)
使用开关听起来很不错。请注意,交换机只进行相等性检查(==
)而不进行身份检查(===
),尽管这应该没问题。
switch (cmd) {
case "JustifyLeft" :
case "JustifyRight" :
case "JustifyCenter" :
case "JustifyFull" :
// do something
break;
case "somethingElse" :
default:
// do something else
break;
}
答案 2 :(得分:1)
我将创建一个IsJustifyCommand(s)方法或创建一个具有IsJustifyCommand()方法的命令抽象类。然后代码将读作描述它正在尝试做什么。
使用正则表达式可能很整洁,但如果不是核心JavaScript程序员的人必须处理代码,则会导致维护问题。但是,如果你有正确的解决方案的批次,那么使用它,因为任何查看代码的人都会很快拿起它。
(但我是一名C#程序员而不是JavaScript程序员,但是像大多数程序员一样,我有时候需要查看/编辑JavaScript代码。我认为大多数JavaScript都是由没有JavaScript程序员维护的。)
答案 3 :(得分:0)
我恨这样写的东西。首先,我看一下代码并思考“如果cmd等于JustifyLeft或JustifyRight ...然后将其反转......如果那是真的那么做......所以这意味着它是JustifyLeft ......”。对我来说,这需要很多时间,我必须重新阅读该行,以确保我做对了。
我认为写作更好。
if ((cmd !== 'JustifyLeft') && (cmd !== 'JustifyRight') && (cmd !== 'JustifyCenter') && (cmd !== 'JustifyFull'))
它可能更冗长但我觉得更容易理解。我把它读成“cmd不能是任何Justify-strings”。检查一个长布尔表达式然后反转整个答案是令人恼火的。
我喜欢scragar的解决方案,只想提出我对反转长布尔表达式的想法。