2009-02-01 3 views
5

Это несколько связано с this question, но я не прошу ресурсов о лучших практиках в JavaScript, но ваш фактический совет.JavaScript Best Practices

Я начну с моего собственного списка. Вы можете либо опубликовать ответ, либо напрямую отредактировать вопрос, если вы уверены, что совет не противоречив.

Здесь мы идем:

  • всегда используют var
  • капитализировать имена функций конструктора - и ничего
  • использование === для сравнения
  • использования явных приведений для примитивов, например Number(), String(), Boolean()
  • проверки для примитивных типов с typeof
  • для проверки типов объектов с instanceof
  • проверкой для встроенных типов объектов с Object.prototype.toString(), чтобы избежать проблем перекрестных кадров, например,

    Object.prototype.toString.call(obj) === '[object Array]' 
    
  • проверка this в конструкторах, например,

    function MyObject() { 
        if(!(this instanceof arguments.callee)) 
         throw new Error('constructor called with invalid `this`'); 
        // [...] 
    } 
    
  • использовать анонимные функции для не разделяет пространства имен загрязняют глобальный масштаб, например,

    (function() { 
        var noGlobalVar = 'foo'; 
        // [...] 
    })(); 
    
  • проверка hasOwnProperty() в for..in петель - не думайте, что никто не перепутались с прототипами

  • не используют for..in петли для перебора элементов массивов или массивов как объектов

ответ

0

использовать явные приведения для примитивов, например Number(), String(), Boolean()

В самом деле? Я избегаю таких, как чума. Что вы думаете об этом?

+1

Мое мышление заключалось в том, чтобы сделать броски явными, например, не делайте такие вещи, как 'a = 3 + document.forms [0] .elemens [0] .value', но' a = 3 + Number (document.forms [ 0] .elemens [0] .Value) '; обратите внимание, что я не ** предлагаю использовать объекты-оболочки ('new Number()', 'new String()', ...) – Christoph

+0

, вам не нужно это делать, если вы не ожидаете, что значение будет содержать строка типа «foo». который потерпит неудачу в любом случае. – scunliffe

+0

@scunliffe: '3 + 'foo' === '3foo'', тогда как '3 + Number ('foo') === NaN' – Christoph

2

Не вмешивайтесь в основные типы. Никогда не вставляйте что-то в Array.prototype - вы не знаете, кто еще это делает, и как такие вещи могут взаимодействовать.

Только проверяйте явные типы, когда это имеет значение. Утиная печать - хорошая концепция.

Я хочу использовать анонимные функции, чтобы избежать загрязнения глобального масштаба. Особенно, когда вы много работаете с JQuery, как я, это очень полезно использовать шаблон:

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

Это относится ко всем языкам в целом:

Избегайте глубокой вложенности, это неприемлемо и очень трудно читать.Есть несколько методов, например, в цикле вы можете сделать раннюю break или continue следующую итерацию вместо того, чтобы обернуть все внутри if.

+0

3-4 уровня в JS? Звучит как невозможно. Иногда у вас есть 4 уровня, прежде чем вы даже начали что-то писать. Рассмотрим Object.defineProperties (...), помещенный в замыкание (function() {...}()) - когда вы начинаете писать, скажем, getter, это тело уже на уровне 4. –

+0

@ SzymonWygnański благодарит за замечание моей ошибки , этот номер был слишком низким – ajax333221

0

всегда используется jslint.

Это немного расстраивает в начале, но это выгодно.

Jslint сообщит вам, если вы нарушите одну или несколько «лучших практик».

Также рассмотрите возможность использования IDE, поддерживающего jslint. Я могу порекомендовать WebStorm или Sublime Text 2 (эти 2 я тестировал сам, и они очень хорошо поддерживают jslint).

+0

Я нашел jshint более практичным и менее самоуверенным для больших команд –