2012-03-09 13 views
7

JSlint nie lubi używania konstruktorów Array i nie ma opcji JSLint, aby je zezwalać. Dlatego, aby utworzyć tablicę o długości n, następujące elementy są niedozwolone: ​​Tworzenie macierzy o rozmiarze n podczas tworzenia JSLinta?

var arr = new Array(n); 

Czy poniższy sposób pozwala mi to obejść?

var arr = []; 
arr.length = 5; 

W normalnych warunkach nie jest to nic wielkiego (za pomocą dwóch linii kodu zamiast jednej), ale żałuję, że nie jest w stanie wykorzystać zwięzłe ciąg mnożnikowy Hack:

function repeat(str, times) { 
    return new Array(times + 1).join(str); 
} 
+0

możliwy duplikat (http: // stackoverflow. com/questions/4852017/right-way-to-initialize-an-array-length-in-javascript) –

+1

Dlaczego musisz utworzyć tablicę o wielkości n? Zważywszy, że opisałeś działanie funkcji mnożnika ciągu jako "hacka", jestem zaskoczony tym, co cię obchodzi, co jslint mówi o 'nowym Array()' ... ale możesz łatwo zaimplementować funkcję 'repeat()' z pętlą for lub '.length =', jeśli jest to jedyny powód, dla którego potrzebujesz 'new Array()'. – nnnnnn

+0

* "Żałuję, że nie mogę używać ..." Czy masz jakieś ograniczenia, które wymagają użycia JSLint? –

Odpowiedz

2

JSLint jest dość łatwo przechytrzyć.

można po prostu to zrobić:

function repeat(str, times) { 
    var A = Array; 
    return new A(times + 1).join(str); 
} 

to również działa: [? Właściwy sposób zainicjować długość tablicy w javascript]

function repeat(str, times) { 
    return new Array.prototype.constructor(times + 1).join(str); 
} 
+0

Idealny! Tego właśnie szukałem: –

+3

Bez problemu. Interesujące jest to, że aby obejść linter, stworzyłeś bardziej niezręczny kod, więc linter robi przeciwieństwo tego, do czego jest przeznaczony. Jeśli natkniesz się na to dużo, możesz rozważyć zaglądanie do innych lintersów (lub przyglądanie się temu projektowi). –

+0

Naprawdę nie mam nic przeciwko niezręczności. Byłem naprawdę zainteresowany widząc, czy jest jakiś hack, aby JSLint zignorował hack. –

Powiązane problemy