2009-02-02 13 views
38

Quindi ho esplorato diversi metodi per ripulire e testare il mio JavaScript. Ho pensato che come qualsiasi altra lingua un modo per migliorare è leggere un buon codice. jQuery è molto popolare quindi deve avere un certo grado di buona codifica.A cosa serve JSLint se jQuery fallisce la convalida

Così perché quando corro jQuery attraverso la validazione del JSLint mi dà questo messaggio:

Error:

Problem at line 18 character 5: Expected an identifier and instead saw 'undefined' (a reserved word).

undefined,

Problem at line 24 character 27: Missing semicolon.

jQuery = window.jQuery = window.$ = function(selector, context) {

Problem at line 24 character 28: Expected an identifier and instead saw '='.

jQuery = window.jQuery = window.$ = function(selector, context) {

Problem at line 24 character 28: Stopping, unable to continue. (0% scanned).

Questo è stato fatto utilizzando JSLint e jquery-1.3.1.js

+10

jQuery non è esattamente esemplare Javascript – singpolyma

+2

So che questa è una vecchia questione, ma jQuery utilizza JSLint ora: http://docs.jquery.com/JQuery_Core_Style_Guidelines –

risposta

104

JSLint test opinioni un particolare della persona (Douglas Crockford) per quanto riguarda ciò che rende buon codice JavaScript Crockford è molto bravo, ma alcune delle sue opinioni sono al massimo ritentive anali, come la regola del trattino basso o l'uso degli operatori di incremento/decremento.

Molti dei problemi taggati da JSLint nell'output precedente sono problemi che Crockford ritiene porta a un codice difficile da mantenere, oppure sono cose che ritiene abbia portato a fare cose "intelligenti" in passato che possono essere difficile da mantenere.

Ci sono alcune cose che Crockford identifica come errori che sono d'accordo, come la cosa dei punti e virgola mancante. La caduta del punto e virgola costringe il browser a indovinare dove inserire il token di fine istruzione e talvolta può essere pericoloso (è sempre più lento). E molti di questi errori sono legati a JSLint che non si aspetta o supporta più incarichi come jQuery fa on line 24.

Se hai una domanda su un errore JSLint, e-mail Crockford, è davvero bravo a rispondere, e con la sua risposta, almeno saprai perché JSLint è stato implementato in quel modo.

Oh, e solo perché una libreria è popolare non significa che il codice sia buono. JQuery è popolare perché è una libreria relativamente veloce e facile da usare. Che sia ben implementato è piuttosto irrilevante per la sua popolarità tra molti. Tuttavia, dovresti sicuramente leggere più codice, dovremmo tutti.

JSLint può essere molto utile per identificare i problemi con il codice, anche se JQuery non supera gli standard che desidera.

+5

tutti i punti presi bene, e bene evidenziare che doesn popolari uguale a –

+3

JQery attualmente cerca di essere compatibile con jslint ora! Guarda qui -> http://forum.jquery.com/topic/jquery-1-4-2-jslint-report –

+0

A Crockford non piace mettere istruzioni if ​​/ for/while, etc su una riga. Ha sempre voglia di vedere {} parentesi graffe. Qualcuno può chiarire perché questo è importante? (La leggibilità non è una risposta accettabile). –

9

JSLint aiuta a cogliere problemi, non è un test di validità o una sostituzione per il pensiero. jQuery è abbastanza avanzato come js goes, il che rende comprensibile un risultato del genere. Voglio dire, il primo paio di linee sono gli hack di velocità, non c'è da stupirsi che il parser js più rigido abbia un paio di errori.

In ogni caso, l'ipotesi che il codice popolare sia codice perfettamente corretto o anche "buono" è difettoso. Il codice JQuery è buono e puoi imparare molto dalla lettura. Dovresti comunque eseguire le tue cose tramite JSLint, se non altro perché è bello sentire un altro parere su ciò che hai scritto.

Dalla descrizione di JSLint:

JSLint takes a JavaScript source and scans it. If it finds a problem, it returns a message describing the problem and an approximate location within the source. The problem is not necessarily a syntax error, although it often is. JSLint looks at some style conventions as well as structural problems. It does not prove that your program is correct. It just provides another set of eyes to help spot problems.

JSLint defines a professional subset of JavaScript, a stricter language than that defined by Edition 3 of the ECMAScript Language Specification. The subset is related to recommendations found in Code Conventions for the JavaScript Programming Language.

+0

ottima spiegazione - buona aggiunta del modulo di collegamento JSLint sito –

4

Se non sei attivamente lo sviluppo di jQuery per sé, perché anche eseguire JSLint su di esso a tutti? Se funziona, funziona, e non devi preoccuparti di questo.

+4

Capisco cosa stai dicendo, ma come sarebbe una spiegazione in questo modo aiuta i nostri colleghi programmatori? –

+0

Si spera che le persone pensino a ciò che è rilevante e a cosa non vale la pena dedicare del tempo a preoccuparsi? – nickf

+0

È necessario passare jQuery a JSLint per evitare errori "non definiti" sul proprio codice. – HRJ

4

Gli obiettivi degli sviluppatori jQuery non sono gli stessi dei tuoi obiettivi. jQuery è costruito per velocità e compattezza e il raggiungimento di questi obiettivi supera la leggibilità e la manutenibilità.

I test di Crockford in JSLint hanno più a che fare con il raggiungimento di qualcosa che si sentirebbe a suo agio portare a casa per incontrare sua madre, il che è una preoccupazione valida se si sarà sposati con il codice per qualche tempo.

3

Lo scopo di JSLint è chiaramente indicato nelle FAQ [1]:.

"JSLint definisce un sottoinsieme professionale di JavaScript, un linguaggio più restrittivo di quello definito da Edizione 3 della specifica del linguaggio ECMAScript Il sottoinsieme è correlato alle raccomandazioni trovate in Convenzioni di codice per il linguaggio di programmazione JavaScript. "

Ora, se siete confusi: ECMA3 è già un sottoinsieme delle funzionalità JS forniti da qualsiasi di oggi JS interpreti (vedi [2] per una panoramica del rapporto tra le versioni JavasScript e ECMAScript)

Per rispondere alla domanda: "A cosa serve JSlint": * usa JsLint per verificare che tu stia usando un sottoinsieme "sicuro" di Javascript che è improbabile rompere con le implementazioni JS. * utilizzare JSLint per verificare di aver seguito le convenzioni codice Crockford [4]

7

"jQuery è molto popolare quindi deve avere un certo grado di buona codifica."

Uno vorrebbe sperare che questo sia il caso di jQuery, ma sfortunatamente non è proprio vero. jQuery è utile e popolare, ma non è una libreria JavaScript ben scritta. David Mark ha recentemente pubblicato una critica feroce di jQuery in comp.lang.javascript che prende in esame un gran numero di esempi di codice poveri trovato in jQuery:

http://groups.google.com/group/comp.lang.javascript/msg/37cb11852d7ca75c?hl=en&

+43

Ho appena letto l'intero thread e ho appreso che David Mark è un cazzone, jQuery fa schifo, tutte le librerie JS fanno schifo, qualsiasi cosa tu non scrivi ti fa schifo, e anche se lo scrivi, fa ancora schifo. Quello che non ho trovato sono state alternative a jQuery, o davvero qualche suggerimento utile. jQuery è –

+0

"Alternative a jQuery"? Dipende da cosa vuoi usare se per. jQuery ha così tante funzioni, niente di buono avrà tutto. Le librerie di piccole dimensioni dispongono di piccoli setet in modo da poter utilizzare quelli necessari. – singpolyma

+2

Apparentemente quello che dovrebbe succhiare meno è http://forkjavascript.org/ Ho intenzione di provarlo per il mio prossimo progetto. – vsedach

1

ho trovato un caso in cui JSLint molto è , molto utile: quando prendi una di quelle librerie big-ass che fluttuano intorno alla 'Net, poi un'altra, poi un'altra ancora, ti ritrovi presto a caricare 50k di Javascript su ogni nuovo caricamento della pagina (il caching potrebbe aiutarti, ma non lo è una soluzione curativa).

Cosa faresti allora? Comprimi quelle librerie. Ma il tuo host non esegue la compressione per file non html! E allora? Si utilizza un compressore Javascript.

Il migliore che ho trovato è quello di Dean Edward; L'ho usato per comprimere John Fraser's Showdown (una libreria Markdown per Javascript), ma sfortunatamente la compressione ha rotto il codice. Dal momento che Showdown non è più supportato, ho dovuto correggerlo da solo - e JSlint è stato inestimabile per questo.

In breve, JSlint è utile per preparare il codice JS per la compressione pesante.

+0

Oggigiorno qualsiasi compressore JS degno di questo nome costruisce un albero simbolo astratto e può quindi apportare le necessarie modifiche al codice per comprimere correttamente il codice, purché non si abbia effettivamente un codice non funzionante. – foxxtrot

-1

Se ti piacciono i metodi daisy-chain come jQuery ti consente, apprezzerai YUI3.

-1

JQuery non è ovviamente la cosa migliore del mondo. Questo è già chiaro quando si guarda la notazione. La combinazione di parentesi del dollaro è davvero male per i tuoi occhi. La programmazione dovrebbe essere chiara e semplice. JQuery è lontano da quello. Quel motivo è abbastanza per me per non usarlo.Il fatto che non sia scritto correttamente non mi sorprende e sottolinea solo i miei pensieri su questa libreria JavaScript.

+4

-1 Perché non sono d'accordo con quasi tutto questo importo –