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