Pesquisa de site

javascript - JS Lint Notação Literal de Array com Divisão de String


Eu sei que o JSLint é apenas um guia e que você deve levar o que ele diz com um grão de sal, no entanto, estou curioso para saber como posso até mesmo resolver este aviso sem reescrever toda a função. Aqui está a função em questão:

function randomString(length) {
    var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split(''),
    str = '',
    i;

    if (!length) {
        length = randomNumber(chars.length);
    }

    for (i = 0; i < length; i++) {
        str += chars[randomNumber(chars.length)];
    }
    return str;
}

O JS Lint me diz "JS Lint: Use a notação literal de array []." e está apontando para a linha com string.split(). Como posso satisfazer o JSLint sem ter que reescrever a função inteira? Isso é mesmo possível?

Estou ciente de que existem outros métodos para gerar strings aleatórias; estou interessado em como resolver o aviso do JSLint usando este método.

Resposta #1

Aqui está seu Array na notação literal de array:

[ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'T', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ]

O JSLint provavelmente sugeriu isso, porque dessa forma o Interpretador não precisa dividir a String durante a execução, mas já tem o Array pronto para usar.

Simplesmente gerado com este código PHP:

php > $chars = str_split('ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'); 
php > echo "[ '".implode("', '", $chars)."' ]";
[ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'T', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ]
php > 

Resposta #2

Você pode chamar a função split do protótipo String com a string como escopo para evitar o aviso:

var chars = String.prototype.split.call('ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz', ''), 

Não sei por que o JSLint reclama, já que split é um método de String.

Veja: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split

isso também parece passar sem reclamações:

var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz',
chars = alphabet.split("");