2009-02-01 17 views
5

Jest to w pewnym sensie związane z this question, ale nie pytam o zasoby dotyczące najlepszych praktyk w JavaScript, ale rzeczywiste porady.JavaScript Best Practices

Zacznę od mojej własnej listy. Możesz napisać odpowiedź lub bezpośrednio edytować pytanie, jeśli masz pewność, że nie jest ono kontrowersyjne.

Zaczynamy:

  • zawsze używać var
  • wykorzystać nazwy funkcji konstruktora - i nic innego
  • użytku === dla porównania
  • używania jawnego odlewane dla prymitywów, np Number(), String(), Boolean()
  • wyboru dla typów pierwotnych z typeof
  • kontroli dla typów obiektów z instanceof
  • kontroli do wbudowania z Object.prototype.toString() typów obiektów, aby uniknąć problemów między ramkami, np

    Object.prototype.toString.call(obj) === '[object Array]' 
    
  • sprawdzenie this w konstruktorów np

    function MyObject() { 
        if(!(this instanceof arguments.callee)) 
         throw new Error('constructor called with invalid `this`'); 
        // [...] 
    } 
    
  • używać funkcji anonimowych do wyświetlania nazw, aby nie zanieczyszczać zasięgu globalnego, np.

    (function() { 
        var noGlobalVar = 'foo'; 
        // [...] 
    })(); 
    
  • check hasOwnProperty() w for..in pętlach - nie należy zakładać, że nikt nie grzebał prototypów

  • nie używać for..in pętle iteracyjne nad elementami tablic lub tablicy przedmiotów podobnych

Odpowiedz

0

używać jawnych rzutów dla prymitywów, np. Number(), String(), Boolean()

Naprawdę? Unikam takich jak zaraza. Co o tym myślisz?

+1

moje myślenie polegało na wyraźnym rzucaniu rzutów, np. Nie rób rzeczy takich jak 'a = 3 + document.forms [0] .elemens [0] .value', ale' a = 3 + Number (document.forms [ 0] .elemens [0] .value) '; zauważ, że nie ** nie ** radzę używać obiektów opakowujących ('new Number()', 'new String()', ...) – Christoph

+0

nie musisz tego robić, chyba że spodziewasz się, że wartość będzie zawierała ciąg taki jak "foo". które i tak zawiodą. – scunliffe

+0

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

2

Nie mieszaj się z typami rdzeni. Nigdy nie przyklejaj czegoś do Array.prototype - nie wiesz, kto jeszcze to robi i jak takie rzeczy mogą wchodzić w interakcje.

Sprawdzaj tylko typy jawne, gdy jest to ważne. Pisanie na kaczce to dobra koncepcja.

Chcę ponownie użyć anonimowych funkcji, aby uniknąć zanieczyszczenia o zasięgu globalnym. Zwłaszcza, gdy dużo pracy z jQuery, jak ja, to naprawdę pomocne użyć szablonu takiego:

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

Odnosi się to do wszystkich języków w ogóle:

Unikać głębokie zagnieżdżanie, to jest nie do przyjęcia i bardzo trudne do odczytania.Istnieją pewne techniki, na przykład w pętlach można wykonać wczesną break lub continue kolejną iterację zamiast owijać wszystko wewnątrz if.

+0

3-4 poziomy w JS? Brzmi jak niemożliwe. Czasami masz 4 poziomy, zanim jeszcze zaczniesz coś pisać. Rozważmy Object.defineProperties (...) umieszczoną w zamknięciu (function() {...}()) - kiedy zaczynasz pisać, powiedzmy, getter, jego ciało jest już na poziomie 4. –

+0

@ SzymonWygnański dzięki za odnotowanie mojego błędu ta liczba była zdecydowanie za niska – ajax333221

0

zawsze używaj jslint.

Trochę frustrujące na początku, ale jest to korzystne.

Jslint poinformuje Cię, jeśli złamiesz jedną lub więcej "najlepszych praktyk".

Należy również rozważyć użycie IDE obsługującego jslint. Mogę polecić WebStorm lub Sublime Text 2 (te 2 testowałem samodzielnie i bardzo dobrze wspierają jslint).

+0

Znalazłem jshint, aby był bardziej praktyczny i mniej uparty dla dużych zespołów –

Powiązane problemy