有没有更好的方法来写这个倍数或条件?

时间:2009-06-09 07:25:16

标签: javascript operators conditional

我在javascript中有以下IF语句:

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

有关如何以更清洁的方式撰写的任何建议吗?

由于

4 个答案:

答案 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的解决方案,只想提出我对反转长布尔表达式的想法。