2

我在 javascript 中有以下 IF 语句:

if ( !(cmd === 'JustifyLeft' || cmd === 'JustifyRight' || cmd === 'JustifyCenter' || cmd === 'JustifyFull') )

关于如何以更清洁的方式编写它的任何建议?

谢谢

4

4 回答 4

17
if(!cmd.match(/^Justify(Left|Right|Center|Full)$/))

作为对一些评论的回应,您还可以通过一个小编辑来模仿您的严格比较:

if( typeof cmd != 'String' || !cmd.match(/^Justify(Left|Right|Center|Full)$/))

这将以与您当前代码完全相同的方式做出反应,忽略任何不是字符串的内容。

我个人认为你不太可能需要它。

于 2009-06-09T07:32:24.120 回答
4

这听起来像是使用开关的好情况。请注意,开关只进行相等检查(==)而不是身份检查(===),尽管这应该没问题。

switch (cmd) {
    case "JustifyLeft" :
    case "JustifyRight" :
    case "JustifyCenter" :
    case "JustifyFull" :
        // do something
    break;
    case "somethingElse" :
    default:
        // do something else
    break;
}
于 2009-06-09T07:36:44.483 回答
1

我会创建一个 IsJustifyCommand(s) 方法或创建一个具有 IsJustifyCommand() 方法的命令抽象类。然后代码会读起来就像它正在尝试做什么的描述。

使用正则表达式可能很简洁,但如果不是核心 JavaScript 程序员的人必须处理代码,则会导致维护问题。但是,如果您有很多情况下正则表达式是一个很好的解决方案,那么请使用它,因为任何查看代码的人都会很快接受它。

(但是我是 C# 程序员而不是 JavaScript 程序员,但像大多数程序员一样,有时我必须查看/编辑 JavaScript 代码。我认为大多数 JavaScript 都不是由 JavaScript 程序员维护的。)

于 2009-06-09T12:09:02.843 回答
0

我讨厌这样写的东西。首先,我查看代码并认为“如果 cmd 等于 JustifyLeft 或 JustifyRight ...然后将其反转并且...如果这是真的,请执行此操作.. 这意味着如果它是 JustifyLeft ...”。对我来说,这需要很多时间,我必须重新阅读该行以确保我做对了。

我觉得写得更好。

if ((cmd !== 'JustifyLeft') && (cmd !== 'JustifyRight') && (cmd !== 'JustifyCenter') && (cmd !== 'JustifyFull'))

它可能有点冗长,但我发现它更容易理解。我把它读作“cmd 不能是任何 Justify-strings”。检查一个长布尔表达式然后反转整个答案是令人讨厌的。

我喜欢 scragar 的解决方案,只是想表达我对反转长布尔表达式的想法。

于 2009-06-10T15:21:20.197 回答