2009-02-01 17 views
5

Esto está relacionado de alguna manera con this question, pero no estoy pidiendo recursos sobre las mejores prácticas en JavaScript, sino su consejo real.Prácticas recomendadas de JavaScript

Comenzaré con mi propia lista. Puede publicar una respuesta o editar directamente la pregunta si está seguro de que el consejo no es controvertido.

Aquí vamos:

  • Utilice siempre var
  • mayúscula los nombres de las funciones constructoras - y nada más
  • uso === para la comparación
  • utilizar conversiones explícitas para primitivas, por ejemplo Number(), String(), Boolean()
  • de verificación para los tipos primitivos con typeof
  • de verificación para los tipos de objetos con instanceof
  • cheque por incorporado en tipos de objetos con Object.prototype.toString() para evitar problemas de bastidor transversal, por ejemplo

    Object.prototype.toString.call(obj) === '[object Array]' 
    
  • cheque this en los constructores, por ejemplo

    function MyObject() { 
        if(!(this instanceof arguments.callee)) 
         throw new Error('constructor called with invalid `this`'); 
        // [...] 
    } 
    
  • uso funciones anónimas para namespacing a no contamina el alcance global, por ejemplo,

    (function() { 
        var noGlobalVar = 'foo'; 
        // [...] 
    })(); 
    
  • cheque hasOwnProperty() en for..in bucles - no compromete la que nadie ensuciado con los prototipos

  • no utilizan for..in bucles para iterar sobre elementos de arrays u objetos de matriz similar a

Respuesta

0

usan moldes explícitos para primitivos, por ejemplo Número(), String(), Boolean()

serio? Yo evito aquellos como la peste. ¿Qué piensas sobre eso?

+1

mi pensamiento era hacer moldes explícitos, por ejemplo, no hacer cosas como 'a = 3 + document.forms [0] .elemens [0] .value', pero' a = 3 + Number (document.forms [ 0] .elemens [0] .value) '; Observe que estoy ** no ** aconsejando usar objetos contenedoras ('new Number()', 'new String()', ...) – Christoph

+0

no necesita hacer eso a menos que espere que el valor contenga una cadena como 'foo'. que fallará de cualquier manera. – scunliffe

+0

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

2

No se entrometa con los tipos de núcleo. Nunca pegue algo en Array.prototype: no sabe quién más está haciendo eso y cómo podrían interactuar.

Solo verifique los tipos explícitos cuando sea importante. Duck typing es un buen concepto.

Quiero utilizar funciones anónimas para evitar la contaminación del alcance global. Especialmente cuando se trabaja mucho con jQuery, como yo, es muy útil usar una plantilla como esta:

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

Esto se aplica a todos los idiomas en general:

que no se peguen profunda, es inaceptable y muy difícil de leerExisten algunas técnicas, por ejemplo, en bucles, puede realizar una próxima iteración al break o continue en lugar de envolver todo dentro de un if.

+0

¿3-4 niveles en JS? Suena imposible. A veces tienes 4 niveles antes incluso de que comiences a escribir algo. Considere Object.defineProperties (...) colocado en un cierre (function() {...}()) - cuando empiece a escribir digamos que getter su cuerpo ya está en el nivel 4. –

+0

@ SzymonWygnański gracias por notar mi error , ese número era demasiado bajo – ajax333221

0

utilice siempre jslint.

Es un poco frustrante al principio, pero es beneficioso.

Jslint le dirá si rompe una o más de las "mejores prácticas".

Considere también usar IDE que admita jslint. Puedo recomendar WebStorm o Sublime Text 2 (estos 2 me he probado a mí mismo y admiten jslint muy bien).

+0

Encontré jshint para ser más práctico y menos dogmático para equipos grandes –

Cuestiones relacionadas