JSLint不喜欢默认为switch中的第一种情况

时间:2013-09-12 13:51:00

标签: javascript node.js jslint

我正在使用JSLint使我的(工作)代码更清洁。

这是一个有用的工具,但它完全不喜欢这个:

//...
switch (process.argv.length) {
    default:

    case 9:
        LOG = process.argv[8];
    case 8:
        EMERGENCY = process.argv[7];
    //...
        break;
    case 1:
    case 0:
        emergency('Error');
        break;
}

JSLint说:

Missing 'case'.
Expected '}' to match 'switch' and instead saw 'case'
Expected '9' at column 5, not column 10.
Expected ';' and instead saw ':'
Expected ':' at column 5, not column 11
Unexpected ':'
Stopping.

全部在'案例9:'行

如果用户提出过多论据,我已将默认设置为首先禁止应用。

我可以把它放在最后并复制粘贴其中的所有传递,但我不喜欢这个想法,或者在嵌套中制作所有这些,但是它是不可读的。

有没有办法让JSLint接受这个?

编辑:

这里是在旧版本中处理switch案例角色的代码(接受较少的参数:

if (process.argv.length>=3){
    DOWNLOAD_DIR=PATH+process.argv[2];
    if(process.argv.length>=4){
        DOWNLOAD_ADD=process.argv[3];
        if (process.argv.length>=5)
        {
            SMIL_ADD=process.argv[4];
            if (process.argv.length>=6)
            {
                UPDATE_H=parseInt(process.argv[5],10);
                if (process.argv.length>=7)
                {
                    UPDATE_M=parseInt(process.argv[6],10);
                }
            }
        }
    }
}

正如你所看到的,即使它使我以不寻常的方式使用默认值,交换机也比嵌套的交换机更具可读性。

1 个答案:

答案 0 :(得分:1)

您的默认情况也需要break;

编辑:

抱歉,我不太明白你的问题。首先,在您编辑的版本中,不需要嵌套每个if语句。另外,如果不满足这些条件,这些变量(例如,DOWNLOAD_DIR)会相等吗?你不能在以下方面做点什么:

DOWNLOAD_DIR = (process.argv[2] !== undefined) ? PATH + process.argv[2] : '';
DOWNLOAD_ADD = (process.argv[3] !== undefined) ? process.argv[3] : '';
// etc, etc

然后你可以在最后添加:

LOG = (process.argv.length >= 9) ? process.argv[8] : '';

在你的情况下,听起来你想要将那些空字符串设置为默认值,这意味着整个事情可以用很少的代码完成,例如:

var DOWNLOAD_DIR = (process.argv[2] !== undefined) ? PATH + process.argv[2] : '/downloads';