2009-02-01 8 views
5

Questo è in qualche modo correlato a this question, ma non sto chiedendo risorse sulle best practice in JavaScript, ma i tuoi consigli effettivi.Procedure consigliate JavaScript

Inizierò con la mia lista personale. Puoi inviare una risposta o modificare direttamente la domanda se sei sicuro che il consiglio non sia controverso.

Qui andiamo:

  • utilizzare sempre var
  • capitalizzare nomi delle funzioni costruttore - e nient'altro
  • uso === per il confronto
  • uso cast espliciti per le primitive, per esempio Number(), String(), Boolean()
  • controllo per i tipi primitivi con typeof
  • controllo per tipi di oggetti con instanceof
  • controllo per incasso tipi di oggetti con Object.prototype.toString() per evitare problemi tra frame, ad esempio

    Object.prototype.toString.call(obj) === '[object Array]' 
    
  • controllo this nei costruttori, per esempio

    function MyObject() { 
        if(!(this instanceof arguments.callee)) 
         throw new Error('constructor called with invalid `this`'); 
        // [...] 
    } 
    
  • uso funzioni anonime per namespacing di non inquinare l'ambito globale, ad esempio

    (function() { 
        var noGlobalVar = 'foo'; 
        // [...] 
    })(); 
    
  • controllo hasOwnProperty() in for..in loop - non impegna che nessuno pasticciato con i prototipi

  • non utilizzare for..in loop per scorrere gli elementi di matrici o oggetti array come

risposta

0

utilizzare i cast espliciti per le primitive, ad es. Number(), String(), booleano()

Davvero? Evito quelli come la peste. Cosa ne pensi?

+1

il mio pensiero era di rendere espliciti i cast, ad esempio non fare cose come 'a = 3 + document.forms [0] .elemens [0] .value', ma' a = 3 + numero (document.forms [ 0] .elemens [0] .value) '; notiamo che non sto ** consigliando di usare gli oggetti wrapper ('new Number()', 'new String()', ...) – Christoph

+0

non è necessario farlo se non si prevede che il valore contenga una stringa come 'foo'. che fallirà in entrambi i modi. – scunliffe

+0

@scunliffe: '3 + 'foo' === '3foo'', considerando '3 + Number ('foo') === NaN' – Christoph

2

Non immischiarsi con i tipi di anima. Non attaccare mai qualcosa su Array.prototype - non sai chi altri lo sta facendo e come queste cose potrebbero interagire.

Controllare solo i tipi espliciti quando è importante. Duck typing è un buon concetto.

Desidero in secondo luogo utilizzare le funzioni anonime per evitare l'inquinamento dello scopo globale. Soprattutto quando si lavora molto con jQuery, come faccio io, è davvero utile per utilizzare un modello come questo:

(function($) { 
    /* Lots of code */ 
})(jQuery); 
0

Questo vale per tutte le lingue in generale:

Evitare profondità di nidificazione, è inaccettabile e molto difficile da leggere.Esistono alcune tecniche, ad esempio nei cicli, è possibile eseguire una prima iterazione break o continue invece di racchiudere tutto all'interno di una if.

+0

3-4 livelli in JS? Sembra impossibile. A volte hai 4 livelli prima ancora di iniziare a scrivere qualcosa. Considera Object.defineProperties (...) inserito in una chiusura (function() {...}()) - quando inizi a scrivere diciamo getter che il suo corpo è già al livello 4. –

+0

@ SzymonWygnański ringrazia per aver notato il mio errore , quel numero era troppo basso – ajax333221

0

utilizzare sempre jslint.

All'inizio è un po 'frustrante, ma è vantaggioso.

Jslint ti dirà se interrompi una o più delle "migliori pratiche".

Considerare inoltre l'utilizzo di IDE che supporta jslint. Posso consigliare WebStorm o Sublime Text 2 (questi 2 ho provato me stesso e supportano jslint molto bene).

+0

Ho trovato jshint per essere più pratico e meno supponente per le grandi squadre –

Problemi correlati