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"?
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
iobject['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); cofor
...in
jest dla (i czym nie jest ).Property-sniffing; czym jest
undefined
(i dlaczego pachnie); dlaczego pozornie mało znanyin
operator jest korzystny i różni się odtypeof
/undefined
kontrole;hasOwnProperty
; celdelete
.Że typ danych
Number
jest rzeczywiście float; niezależne od języka trudności z używaniem floatów; unikanie pułapkiparseInt
ó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żywaniavar
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 operatornew
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ęć lubFunction#bind
, aby obejść to.Inne ECMAScript Fifth Edition zawiera takie funkcje jak
indexOf
,forEach
oraz metod funkcyjno-programowych naArray
; 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; jakpostMessage
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").
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ć.
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!!
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
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:
- Zamknięcia
- dziedziczenie oparte na prototypie
- wzór modułu
- W3C-DOM
- Jak działają wydarzenia
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!
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
Zapoznaj się przynajmniej z jedną biblioteką Javascript (Jquery, Prototype, itp.).
-
Dowiedz się, jak korzystać z narzędzi debugowania głównych przeglądarek ( MSIE 7-8, Firefox, Chrome, Safari )
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ść.
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.
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ę!
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();
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
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.
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":
- JavaScript jest dobry, ale DOM jest pain point
- problemy z przeglądarką mogą sprawić, że zwariujesz
- 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
- Zamknięcie .............. Must know
- Its prototype based ........... Nice one its fun to learn this
- debugger słowo kluczowe ..... Pomaga w kryzysie
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
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ę.
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
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ż.
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
JSLint http://www.JSLint.com/
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ć.
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..
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.
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)
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? :^)
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...
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.
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
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
- wiedząc, że istnieje życie z i bez
with()
i gdzie wyznaczyć granicę. - możesz tworzyć własne błędy za pomocą Instrukcji
throw
, aby celowo zatrzymać javascript runtime.
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') : '');
}
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.
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.
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