Javascript JSLint不';I don’我不喜欢将默认值作为开关中的第一种情况

Javascript JSLint不';I don’我不喜欢将默认值作为开关中的第一种情况,javascript,node.js,jslint,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: emerg

我正在使用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”线上

我将默认设置放在第一位,以便在用户输入太多参数时不会阻止应用程序。

我可以把它放在最后,然后把所有的过程都复制粘贴到里面,但我不喜欢这个想法,或者把所有这些都放在嵌套的if中,但是它是不可读的

有没有办法让JSLint接受这一点

编辑:

下面是在旧版本中处理开关案例角色的代码(该版本接受的参数较少:

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);
                }
            }
        }
    }
}

正如您所看到的,该开关比嵌套的开关可读性好得多,即使它使我以一种不同寻常的方式使用默认值。

在默认情况下,您也需要有一个
中断;

编辑:

很抱歉,我不太理解您的问题。首先,在您编辑的版本中,不需要嵌套每个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';

JSLint不喜欢它,我也不喜欢它。带有fall-through cases的
switch
语句是所有反模式之母。目标是实现默认fall-through在这种情况下,我处理了开关末尾参数太少的错误。当我声明它们时,如果用户没有输入足够的con,我会输入默认值配置。对于DOWNLOAD_DIR示例,它是var DOWNLOAD_DIR='downloads/'。我正在尝试您的示例您的解决方案是完美的,我还没有在JSLint上进行测试,但它可读性好,不要奇怪地使用代码,甚至可以减轻我的代码负担。顺便说一句,JSLint确实喜欢这种编写方式