Co powinien wiedzieć każdy programista JavaScript? [zamknięte]

Czy istnieje zestaw rzeczy, które każdy programista JavaScript powinien wiedzieć, aby móc powiedzieć "znam JavaScript"?

Author: gath, 2010-04-13

30 answers

nie jQuery. Nie YUI. Nie (itd. itd.)

Frameworki mogą być przydatne, ale często ukrywają przed tobą brzydkie szczegóły działania JavaScript i DOM. Jeśli twoim celem jest powiedzenie "znam JavaScript", to inwestowanie dużo czasu w ramy jest temu przeciwne.

Oto kilka funkcji języka JavaScript, które powinieneś wiedzieć, aby grok co robi i nie dać się złapać, ale które nie są od razu oczywiste dla wielu ludzie:

  • To object.prop i object['prop'] to to samo (więc możesz przestać używać eval, dzięki); że właściwości obiektu są zawsze ciągami znaków (nawet dla tablic); co for...in jest dla (i czym nie jest ).

  • Property-sniffing; czym jest undefined (i dlaczego pachnie); dlaczego pozornie mało znany in operator jest korzystny i różni się od typeof/undefined kontrole; hasOwnProperty; cel delete.

  • Że typ danych Number jest rzeczywiście float; niezależne od języka trudności z używaniem floatów; unikanie pułapki parseInt ósemkowej.

  • Zagnieżdżone zakresy funkcji; konieczność używania var w zakresie, którego chcesz uniknąć przypadkowych globali; jak można używać zakresów do zamykania; problem pętli zamknięcia {39]}.

  • Jak zmienne globalne i właściwości window zderzają się; jak zmienne globalne i elementy dokumentu nie powinny zderzać, ale robić w IE; konieczność używania var w zasięgu globalnym też, aby tego uniknąć.

  • Jak Instrukcja function działa na' hoist ' definicję przed poprzedzającym ją kodem; różnicę między instrukcjami funkcji a wyrażeniami funkcji; dlaczego nazwane wyrażenia funkcji nie powinny być używane .

  • Jak działa konstruktor, właściwość prototype i operator new naprawdę działają; metody wykorzystania tego do stworzenia normal class/subclass / instance system you actually wanted; when you might want to use closure-based objects instead of prototyping. (Większość materiałów samouczka JS jest absolutnie okropna na ten temat; Zajęło mi lata, aby to prosto w mojej głowie.)

  • Jak this jest określony w czasie wywołania, nie związany; jak w konsekwencji przekazywanie metod nie działa tak, jak można oczekiwać z innych języków; jak można użyć zamknięć lub Function#bind, aby obejść to.

  • Inne ECMAScript Fifth Edition zawiera takie funkcje jak indexOf, forEach oraz metod funkcyjno-programowych na Array; Jak naprawić starsze przeglądarki, aby upewnić się, że możesz ich używać; używanie ich z anonimowymi wyrażeniami funkcyjnymi w wierszu, aby uzyskać zwarty, czytelny kod.

  • Przepływ sterowania między przeglądarką a kodem użytkownika; wykonanie synchroniczne i asynchroniczne; zdarzenia uruchamiające się wewnątrz przepływu sterowania (np. focus) vs. zdarzenia i timeouty, które występują po powrocie kontroli; jak wywołanie rzekomo synchronicznego budynku w stylu alert może spowodować potencjalnie katastrofalne ponowne wejście.

  • Jak Skrypty międzyokienne wpływają na instanceof; jak skrypty międzyokienne wpływają na przepływ sterowania między różnymi dokumentami; jak postMessage miejmy nadzieję to naprawi.

Zobacz tę odpowiedź dotyczącą dwóch ostatnich pozycji.

Przede wszystkim powinieneś przeglądać JavaScript krytycznie, uznając, że jest to ze względów historycznych niedoskonały język (nawet bardziej niż większość języków) i unikanie jego najgorszych problemów. Praca crockforda na tym froncie jest zdecydowanie warta przeczytania (chociaż nie zgadzam się w 100% z nim, co do których są "dobre części").

 590
Author: bobince,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:40

Że można go wyłączyć.

 248
Author: graphicdivine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-13 10:42:20

Zrozumienie rzeczy napisanych w Javascript: dobre części jest całkiem dobrym założeniem, że człowiek jest przyzwoitym programistą JS.

Możesz prawie wiedzieć, jak korzystać z dobrej biblioteki, takiej jak JQuery i nadal nie znać ukrytych części Javascript.

Kolejną uwagą jest debugowanie narzędzi w różnych przeglądarkach. Programista JS powinien wiedzieć, jak debugować swój kod w różnych przeglądarkach.

Oh! A znajomość JSLint całkowicie zrani Twoje uczucia!!

 75
Author: bron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-15 16:07:29

Jeśli chcesz być prawdziwym ninja JavaScript, powinieneś znać odpowiedzi na każde pytanie w Perfection kills JavaScript Quiz.

Przykład na zaostrzenie apetytu:
(function f(f){ 
  return typeof f(); 
})(function(){ return 1; });

Co zwraca to wyrażenie?

  • "liczba"
  • "undefined"
  • "Funkcja"
  • błąd
 49
Author: Skilldrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-13 11:36:14

You don 't know JavaScript if you don' t know:

  1. Zamknięcia
  2. dziedziczenie oparte na prototypie
  3. wzór modułu
  4. W3C-DOM
  5. Jak działają wydarzenia
 46
Author: edwin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-21 07:29:00

..że javascript to nie java:)

Wiele, wiele osób zaczynających od tworzenia stron internetowych powiedziało mi, że javascript to po prostu prosta java!

 37
Author: Sripathi Krishnan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-13 10:19:10
  1. Zapoznaj się przynajmniej z jedną biblioteką Javascript (Jquery, Prototype, itp.).

  2. Dowiedz się, jak korzystać z narzędzi debugowania głównych przeglądarek ( MSIE 7-8, Firefox, Chrome, Safari )

  3. Czytaj w branży: strona Douglasa Crockforda jest skarbnicą, podczas gdy Ajaxian.com to dobry blog, aby nadążyć za nowymi, ciekawymi i lub dziwnymi pomysłami na Javascript. Istnieje wiele innych zasobów, ale to one pomogły mi w większość.

 27
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-13 10:21:43

Javascript objects and function as first-class citizen, callbacks , aby nie zapomnieć o zdarzeniach i wtedy JQuery.

 24
Author: Sarfraz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-13 10:29:08

Że Javascript nie jest czymś, czego można się nauczyć w godzinę!

 24
Author: Ashwin Prabhu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-19 19:34:56

Zmienne są globalne, chyba że zadeklarowane jako lokalne!!

Bad (DoSomething () jest wywoływane tylko 10 razy):

function CountToTen()
{
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();

Good (DoSomething () jest wywoływane 50 razy zgodnie z przeznaczeniem):

function CountToTen()
{
  var i;
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  var i;
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();
 23
Author: theycallmemorty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-16 20:54:59
 20
Author: Daniel Vassallo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-13 10:18:22

Za to, że Javascript pierwotnie nazywał się LiveScript, a prefiks "Java" został dołączony do celów marketingowych, a nie dlatego, że Java i Javascript są ze sobą powiązane (czym nie są).

Oh I za posiadanie dowolnej wersji David Flanagan's ' Javascript: the Definitive Guide ' (Ta informacja jest na stronie 2).

... i za docenienie tych, którzy już wcześniej próbowali zaciemnić dokument Internet Explorer 4.Wszystkie [] oraz Netscape Navigator 4 ' s dokument.warstwy [] zanim jQuery usunęło ból.

EDIT:

Jak wskazuje @Kinopiko JavaScript pierwotnie nazywał się project Mocha (niektóre źródła również uważają, że nazywał się Project LiveWire), ale ogólnie przyjmuje się, że język (napisany przez Brendana Eich) miał zostać wydany jako LiveScript przed wprowadzeniem prefiksu Javy na początku 1996 roku.

 8
Author: amelvin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-13 11:16:57

Należy pamiętać o tym, aby powiedzieć "znam JavaScript":

  1. JavaScript jest dobry, ale DOM jest pain point
  2. problemy z przeglądarką mogą sprawić, że zwariujesz
  3. chyba że kod jest testowany na co najmniej 4 różnych dobrych przeglądarkach nie można powiedzieć, że jest wolny od błędów
  4. Zamknięcie .............. Must know
  5. Its prototype based ........... Nice one its fun to learn this
  6. debugger słowo kluczowe ..... Pomaga w kryzysie
 8
Author: Anil Namde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-19 17:43:57

Że JavaScript różni się znacznie bardziej niż inne języki, niż mogłoby się wydawać. Obejrzyj tę wspaniałą rozmowę Google Tech, aby uzyskać wrażenie: http://www.youtube.com/watch?v=hQVTIJBZook

 7
Author: ericteubert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-13 10:18:02

Co każdy programista javascript powinien wiedzieć?

Może, mogę wyłączyć twoje wysiłki za pomocą 2 kliknięć. Tak więc, jeśli to możliwe, zapewnij rezerwę.

 7
Author: Khainestar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-21 08:21:53

Zdecydowanie polecam przeczytać Javascript: The Good Parts

 6
Author: Sungguk Lim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-14 07:15:17

Znasz javascript, jeśli możesz efektywnie używać tablicy, liczby, ciągu znaków, daty i obiektu. Plus punkty za matematykę i wyrażenia regularne. Należy umieć pisać funkcje i używać zmiennych (w odpowiednim zakresie, tzn. jako 'metody' obiektu).

Widzę kilka uwag na temat znajomości zamknięć, ekstrawaganckiej składni funkcji, blabla. Wszystko to jest zupełnie nieistotne dla tego pytania. To jak mówienie, że jesteś biegaczem, jeśli możesz przebiec 100m w czasie poniżej 11 sekund.

I say it takes maybe a couple tygodni, aby stać się biegłym w javascript. Potem potrzeba lat i dziesiątek książek i tysięcy linii programowania, aby stać się ekspertem, ninja, itp.

Ale to nie było pytanie.

OH, a DOM nie jest częścią javascript, podobnie jak jQuery. Więc myślę, że oba są równie nieistotne dla pytania też.

 6
Author: Michiel van der Blonk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-21 17:39:18
 4
Author: Richard Inglis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-13 14:38:16

Po przeczytaniu wszystkich powyższych, jest również doskonale nauczyć się Javascript za pomocą frameworka takiego jak jQuery. Prawda jest taka, że to pierwszy sposób, w jaki wielu ludzi odebrało JS. Nie ma się czego wstydzić.

 4
Author: Soup,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-21 07:24:23

array .length metoda nie jest liczbą pozycji tablicy, ale najwyższym indeksem. nawet gdy element został ustawiony na undefined

var a = [];
a.length;   // === 0
a[10];      // === undefined
a[10] = undefined;
a.length;   // === 11
a.pop();    // === undefined
a.length;   // === 10

To zachowanie trudno odróżnić od błędu projektowania języka..

 4
Author: mykhal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-02 22:56:49

JQuery byłby moją najlepszą rekomendacją. Nie tylko dla samego kodu, to idiom, styl, myślenie za nim jest najbardziej godne emulacji.

 3
Author: duffymo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-13 10:15:58

Że javascript jest najczęściej wdrażanym językiem na świecie. (Prawdopodobnie)

 3
Author: zaf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-13 10:30:23

Nauka języka naprawdę dobrze i zrozumienie jego różnych dziwactw wynika z (wieloletniego) doświadczenia. Jeśli chcesz być lepszym programistą, powiedziałbym, rozumiejąc wzorce projektowe, jak i kiedy ich używać i / lub nawet gdy z nich korzystasz, nie zdając sobie z tego sprawy; Architektura techniczna i doświadczenie użytkownika.

Znajomość języka (JavaScript) oznacza, że możesz wybrać dowolny framework i używać go do woli. Nieuchronnie będziesz musiał zanurzyć się w kodzie źródłowym, a jeśli wszystko, co wiesz, to składnia framework lub 2 lub 3, to nie zajdziesz daleko. Mówiąc to, zapoznanie się z kodem źródłowym kilku różnych frameworków jest prawdopodobnie jednym z najlepszych sposobów, aby zobaczyć, jak JavaScript może być używany. Przeglądając kod w Firebug lub Web Inspector, a następnie sprawdzając dokumentację JavaScript, szczególnie dokumenty Mozilli i Webkit, aby lepiej zrozumieć, na co patrzysz.

Zrozumienie różnicy między programowaniem obiektowym a funkcyjnym, że JavaScript to seksowna mieszanka tych dwóch, a kiedy i jak używać obu do tworzenia zabójczej bazy kodowej, a niesamowite aplikacje sprawią, że będziesz lepszym programistą JavaScript.

Po prostu czytanie niektórych książek, zwłaszcza "dobre części" Crockforda, które po prostu przedstawia swoje opinie na temat tego, co jest dobre w JavaScript, podczas gdy pomijanie większości niesamowitych części JavaScript będzie dostać się na złą stopę.

Sprawdzanie kodu napisanego przez kogoś takiego jak Thomas Fuchs z drugiej strony będzie daje znacznie więcej wglądu w moc pisania niesamowitego i wydajnego JavaScript.

Próba zapamiętywania kilku Gotcha lub WTFs nie pomoże zbytnio, zauważysz to, jeśli zaczniesz kodować i przechodzić przez kod biblioteki/ frameworków, szczególnie pomocnie skomentowany, aby zobaczyć, dlaczego używali pewnych właściwości / wartości, a nie innych, dlaczego i kiedy dobrze jest używać określonych operandów i operatorów, to wszystko jest w kodzie używanego przez ludzi frameworka. Jak lepiej niż uczyć się na przykładzie? :^)

 3
Author: christos constandinou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-23 15:35:45

W Javascript wydajność ma znaczenie.

Nie ma inteligentnego kompilatora do optymalizacji kodu, więc powinieneś być bardziej ostrożny podczas pisania kodu javascript niż języki takie jak C#, Java...

 2
Author: mcaaltuntas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-15 16:49:42

Literały obiektowe, ponieważ są tak miłe w pisaniu.

 1
Author: poo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-13 11:18:29

Ważne są również następujące rzeczy:

1) podnośnik zmienny. 2) łańcuchy zakresu i Obiekty aktywacji.

A potem takie rzeczy::)

3) wtfjs.com

4) Wszystko jest obiektem http://www.lifeinafolder.com/images/Js.jpg

 0
Author: Rajat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-21 03:57:25
  1. wiedząc, że istnieje życie z i bez with() i gdzie wyznaczyć granicę.
  2. możesz tworzyć własne błędy za pomocą Instrukcji throw, aby celowo zatrzymać javascript runtime.
 0
Author: FK82,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-01 13:06:47

JavaScript nie obsługuje oddzielania return I return instrukcji ze znakiem nowej linii, jak poniższy kod (lub spróbuj na my jsfiddle page)

function foo()
{
    return
    {
        bar: 'something'
    };
}

$(function()
{
    document.write(foo());
});

Nie rozumiem, dlaczego JavaScript nie obsługuje tego stylu, ponieważ o wiele łatwiej jest odczytać bardzo złożony kod źródłowy JavaScript, gdy porównuje się go z domyślnym stylem JavaScript.

PS. Pisałem JavaScript prawie 6 lat. Ale właśnie znalazłem ten błąd ze sobą, gdy próbuję wykonać następująca funkcja. Zawsze zwraca niezdefiniowany. Kiedy używam debuggera i wchodzę w tę funkcję, wszystko działa dobrze. Myślę, że to powinien być najgorszy błąd programistyczny w moim życiu.

function JqGridInlineEditor_GenerateTool(cellvalue, options, rowObject, disableEdit, disableDelete)
{
    return 
        (!disableEdit ? '<a class="button edit" href="javascript: void(0);" onclick="JqGridInlineEditor_EditRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Edit.gif'), 'Click here to Edit or \nDouble-click row to edit.') : '') +
        (!disableDelete ? '<a class="button delete" href="javascript: void(0);" onclick="JqGridInlineEditor_DeleteRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Delete.png'), 'Click here to Delete or \nSelect row and then press Delete') : '') +
        (!disableEdit ? '<a class="button save" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_SaveRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Save.png'), 'Click here to Save or \nPress Enter') : '') +
        (!disableEdit ? '<a class="button cancel" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_RestoreRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Cancel.png'), 'Click here to Cancel or \nPress Esc') : '');
}
 -1
Author: Soul_Master,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-03 11:16:11

Ponieważ JS jest językiem funkcyjnym, przyzwoity programista JS musi być w stanie napisać kombinator Y i wyjaśnić, jak to działa.

 -3
Author: user187291,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-13 10:28:32

... o Google Web Toolkit, co oznacza, że twój projekt javascript prawdopodobnie mógłby być rozwijany w znacznie wygodniejszy sposób.

 -5
Author: Viktor Sehr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-14 07:05:07