Это несколько связано с 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
петли для перебора элементов массивов или массивов как объектов
Мое мышление заключалось в том, чтобы сделать броски явными, например, не делайте такие вещи, как 'a = 3 + document.forms [0] .elemens [0] .value', но' a = 3 + Number (document.forms [ 0] .elemens [0] .Value) '; обратите внимание, что я не ** предлагаю использовать объекты-оболочки ('new Number()', 'new String()', ...) – Christoph
, вам не нужно это делать, если вы не ожидаете, что значение будет содержать строка типа «foo». который потерпит неудачу в любом случае. – scunliffe
@scunliffe: '3 + 'foo' === '3foo'', тогда как '3 + Number ('foo') === NaN' – Christoph