Lint警告:前导零和递增/递减运算符

时间:2014-06-08 12:47:27

标签: javascript

我有一些没有通过lint的代码。有更好的方法吗?

第一个错误是

  

lint警告:前导零形成八进制数

function getNumberCounter(lastNumberString, simple){
    var myCount;
    if(!lastNumberString){
        return "-1";
    }
    else{
        switch(lastNumberString.split("-")[1]){
            case "08" : myCount = 9;
                    break;
            case "09" : myCount = 10;
                break;
            case "99" : myCount = 00;
            break;
    default   : myCount = parseInt((lastNumberString.split("-")[1]),10) + 1;
                    break;
        }
        if(!simple){
            if(myCount <= 9){
                return ('0' + myCount);
            }
        }
        return myCount;
    }
}

另一个是

  

lint警告:增量(++)和减量( - )运算符用作更大语句的一部分

function getRandomString(_length){
    _retString = "";
    _charSet = "0123456789abcdefghijklmnopqrstuvwxyz";
    while(_length--){
        _retString += _charSet.charAt(Random(0, _charSet.length-1));
        Delay(1);
    }
    return _retString;
}

这也是javascript,但它不是html类型,是否有人知道它是什么类型,尝试使用javascript检查器,它希望我编写基于HTML的代码。

为什么会发生这种情况,是否会对我在计算机上使用的软件产生实际影响。

1 个答案:

答案 0 :(得分:1)

在许多语言中,除了0本身之外,具有前导零的数字被认为是八进制(即基数8)字面值。例如,012是十进制数十,即使它看起来更像十二。所以00被认为是八进制数,尽管它显然为零。

在严格模式下,八进制文字是一个语法错误,如octal numbers were never part of the ECMAScript standard。我想你的linter正在执行相同的规则。

所以解决你的第一个问题很简单:

    case "99" : myCount = 0;   // Drop one of the zeroes.

第二个问题在这里:

while(_length--){

您正在递减长度的值以及读取其原始值或新值。你的短信是抱怨,因为你正在做两件事。这样做会使代码难以阅读。特别是,循环运行length次还是length - 1次?目前尚不清楚。

你的while循环总是运行固定的次数,因此从风格的角度来看,使用for循环会更好:

for (var i = 0; i < length; ++i) {
    _retString += _charSet.charAt(Random(0, _charSet.length-1));
    Delay(1);
}

由于您现在只在++循环中的++i语句中使用for,因此应该避免lint警告。