Odpowiedzi:
Nie jQuery. Nie YUI. Nie (itp.)
Szkielety mogą być przydatne, ale często ukrywają niekiedy brzydkie szczegóły tego, jak JavaScript i DOM faktycznie działają przed tobą. Jeśli Twoim celem jest powiedzenie „Wiem JavaScript”, inwestowanie dużej ilości czasu w ramy jest temu przeciwne.
Oto niektóre funkcje języka JavaScript, które powinieneś wiedzieć, aby zrozumieć, co robi i nie dać się złapać, ale które nie są od razu oczywiste dla wielu osób:
To object.propi object['prop']to samo (więc możesz przestać używać eval, dzięki); właściwości obiektu są zawsze ciągami (nawet dla tablic); po co jest for...in (a co nie jest ).
Wąchanie własności; co to undefinedjest (i dlaczego pachnie ); Dlatego pozornie mała znany inoperator jest korzystne, a inna z typeof/ undefinedkontroli; hasOwnProperty; cel delete.
Że Numbertyp danych jest naprawdę zmiennoprzecinkowy; niezależne od języka trudności z używaniem pływaków; unikając parseIntpułapki ósemkowej.
Zasięg funkcji zagnieżdżonych; konieczność użycia varw zakresie, w którym chcesz uniknąć przypadkowych globali; jak można stosować lunety do zamykania; problemem pętla zamknięcia .
Jak windowzderzają się zmienne globalne i właściwości; jak zmienne globalne i elementy dokumentu nie powinny kolidować, ale mają się w IE; konieczność stosowania również varw zakresie globalnym, aby tego uniknąć.
Jak functiondziała instrukcja, aby „ podnieść ” definicję przed kodem poprzedzającym ją; różnica między instrukcjami funkcji a wyrażeniami funkcji; dlaczego nazwane wyrażenia funkcyjne nie powinny być używane .
Jak naprawdę działa konstruktor, prototypewłaściwość i newoperator naprawdę działają; metody wykorzystania tego do stworzenia normalnego systemu klasy / podklasy / instancji, którego naprawdę chciałeś; kiedy możesz użyć obiektów opartych na zamknięciu zamiast prototypowania. (Większość materiałów instruktażowych JS jest w tym absolutnie okropna; zajęło mi to lata, aby wyobrazić sobie to prosto w mojej głowie.)
Jak thisustala się w czasie połączenia, a nie ogranicza; jak konsekwentnie przekazywanie metod nie działa tak, jak oczekujesz od innych języków; w jaki sposób zamknięcia Function#bindmogą być wykorzystane do obejścia tego.
Inne ECMAScript Fifth Edition, takich jak indexOf, forEachi funkcjonalno-programowych metod naArray ; jak naprawić starsze przeglądarki, aby mieć pewność, że możesz ich używać; używając ich z wbudowanymi anonimowymi wyrażeniami funkcji, aby uzyskać zwarty, czytelny kod.
Przepływ kontroli między przeglądarką a kodem użytkownika; wykonanie synchroniczne i asynchroniczne; zdarzenia uruchamiane w przepływie kontroli (np. fokus) vs. zdarzenia i przekroczenia czasu, które występują, gdy kontrola powraca; w jaki sposób wywołanie podobno zsynchronizowanego wbudowanego alertmoże skończyć się potencjalnie katastrofalnym ponownym wejściem.
Wpływ skryptu między oknami instanceof; jak skrypty między oknami wpływają na przepływ kontroli między różnymi dokumentami; jak postMessagemam nadzieję to naprawić.
Zobacz tę odpowiedź dotyczącą dwóch ostatnich pozycji.
Przede wszystkim powinieneś przeglądać JavaScript krytycznie, uznając, że z powodów historycznych jest to niedoskonały język (nawet więcej niż większość języków) i unikając jego najgorszych problemów. Praca Crockforda na tym froncie jest zdecydowanie warta przeczytania (chociaż w 100% nie zgadzam się z nim, co do „dobrych części”).
thisjest, niezależnie od sposobu dostępu do niego. Spróbuj: var o= {b: function(){alert(this===o);}};a następnie o['b']();-> true. A jeśli chcesz naprawdę dziwnych, (o['b'])()-> true, ale (c= o['b'])()-> falsei tylko w Mozilli, (true? o['b'] : null)()-> true. W, T i rzeczywiście F.
Że można to wyłączyć.
Zrozumienie rzeczy napisanych w Javascript Crockforda : Dobre części to całkiem dobre założenie, że osoba jest porządnym programistą JS.
Możesz właściwie wiedzieć, jak korzystać z dobrej biblioteki, takiej jak JQuery, i wciąż nie znasz ukrytych części Javascript.
Kolejna uwaga to narzędzia do debugowania w różnych przeglądarkach. Programista JS powinien wiedzieć, jak debugować swój kod w różnych przeglądarkach.
O! A znajomość JSLint całkowicie zrani twoje uczucia !!
Jeśli chcesz być prawdziwym ninja JavaScript, powinieneś znać odpowiedzi na każde pytanie w Perfekcji zabija JavaScript Quiz .
Przykład pobudzenia apetytu:
(function f(f){
return typeof f();
})(function(){ return 1; });
Co zwraca to wyrażenie?
- "numer"
- "nieokreślony"
- "funkcjonować"
- Błąd
Nie znasz JavaScript, jeśli nie wiesz:
You don't know JavaScript if you don't know The W3C-DOM. Dwie rzeczy są różne.
..to javascript to nie java :)
Wiele osób zaczynających od tworzenia stron internetowych powiedziało mi, że javascript to po prostu java!
Zapoznaj się z co najmniej jedną biblioteką JavaScript (Jquery, Prototype itp.).
Dowiedz się, jak korzystać z narzędzi do debugowania głównych przeglądarek (MSIE 7-8, Firefox, Chrome, Safari)
Czytaj dalej o branży: strona internetowa Douglasa Crockforda jest skarbnicą, podczas gdy Ajaxian.com jest dobrym blogiem, aby śledzić nowe, interesujące i dziwne pomysły na Javascript. Istnieje wiele innych zasobów, ale te pomogły mi najbardziej.
Obiekty JavaScript i działają jako pierwszorzędni obywatele , oddzwaniania , nie zapominając o zdarzeniach, a następnie JQuery .
Javascript nie jest czymś, czego można się nauczyć w ciągu godziny!
Zmienne mają charakter globalny, chyba że zostaną zadeklarowane jako lokalne!
Zły (DoSomething () jest wywoływany tylko 10 razy):
function CountToTen()
{
for(i=0; i< 10; i++)
{
DoSomething(i);
}
}
function countToFive()
{
for(i=0; i<5; i++)
{
CountToTen();
}
}
CountToFive();
Dobry (DoSomething () jest wywoływany 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();
for (var i=0;we wszystkich moich pętlach
varna górze funkcji, ponieważ nie wprowadza w błąd co do wielkości zakresu zmiennej. js2-modenarzeka, jeśli masz var idwie osobne forpętle w tej samej funkcji, ponieważ sugeruje to, że uważasz, że masz dwie oddzielne zmienne, a nie masz. Niemniej jednak staram się nigdy nie varoddzielać rzeczy od miejsca, w którym je inicjuję.
Za wiedzę, że Javascript był pierwotnie nazywany LiveScript a do celów marketingowych dołączono przedrostek „Java”, nie dlatego, że Java i JavaScript są powiązane (a nie są).
Aha, za posiadanie dowolnej wersji „Javascript: The Definitive Guide” Davida Flanagana (ta informacja jest na stronie 2).
... i za docenienie tych, którzy już wcześniej próbowali zaciemnić dokument.all.all [] i przeglądarkę dokumentów Netscape Navigator 4 w Internet Explorerze 4, zanim Jquery usunęli ból.
EDYTOWAĆ:
Jak wskazuje @Kinopiko, JavaScript nazywał się pierwotnie projektem Mocha ( niektóre źródła uważają również, że nazywał się on projektem LiveWire), ale ogólnie przyjmuje się, że język (napisany przez Brendana Eicha) miał zostać wydany jako LiveScript przed przyjęciem prefiksu Java w dniu wydanie na początku 1996 roku.
Trzeba powiedzieć, że „wiem JavaScript”:
Ten JavaScript różni się znacznie od innych języków, niż mogłoby się wydawać. Obejrzyj wspaniałą rozmowę Google Tech Talk, aby uzyskać wrażenie: http://www.youtube.com/watch?v=hQVTIJBZook
Co powinien wiedzieć każdy programista javascript?
A może mogę wyłączyć twoje wysiłki za pomocą 2 kliknięć. Więc jeśli to możliwe, zapewnij rezerwę.
Zdecydowanie polecam przeczytać Javascript: The Good Parts
Wiesz javascript, jeśli potrafisz efektywnie używać Array, Number, String, Date i Object. Plus punkty za Math i RegExp. Powinieneś być w stanie pisać funkcje i używać zmiennych (we właściwym zakresie, tj. Jako „metody” obiektu).
Widzę komentarze na temat znajomości zamknięć, ekstrawaganckiej składni funkcji, blabla. Wszystko to jest zupełnie nieistotne dla tego pytania. To tak, jakby powiedzieć, że jesteś biegaczem, jeśli potrafisz przejechać 100 m skok w ciągu 11 sekund.
Mówię, że może potrwać kilka tygodni, aby stać się biegły w javascript. Potem potrzeba wielu lat książek i tysięcy linii programowania, aby stać się ekspertem, ninja itp.
Ale to nie było pytanie.
Aha, a DOM nie jest częścią javascript, podobnie jak jQuery. Myślę więc, że oba są równie nieistotne dla tego pytania.
JSLint http://www.JSLint.com/
tablica . lengthmetoda nie jest liczbą elementów tablicy, ale najwyższym indeksem. nawet gdy element został ustawiony naundefined
var a = [];
a.length; // === 0
a[10]; // === undefined
a[10] = undefined;
a.length; // === 11
a.pop(); // === undefined
a.length; // === 10
takie zachowanie jest trudne do odróżnienia od błędu projektowania języka.
jQuery będzie moją najlepszą rekomendacją. Nie tylko sam kod, ale przede wszystkim idiom, styl i sposób myślenia, które są najbardziej godne naśladowania.
Ten javascript jest najczęściej używanym językiem na świecie. (Prawdopodobnie)
Uczenie się języka naprawdę dobrze i rozumienie jego różnych dziwactw pochodzi z (lat) doświadczenia. Jeśli chcesz być lepszym programistą, powiedziałbym, rozumiejąc wzorce projektowe, jak i kiedy ich używać i / lub nawet kiedy ich używasz, nie zdając sobie z tego sprawy; architektura techniczna i wrażenia użytkownika.
Znajomość języka (JavaScript) oznacza, że możesz wybrać dowolny framework i używać go do woli. Nieuchronnie będziesz musiał zagłębić się w kod źródłowy, a jeśli wszystko, co wiesz, to składnia framework lub 2 lub 3, to nie zajdziesz daleko. Mówiąc to, dostanie się do kodu źródłowego kilku różnych frameworków jest prawdopodobnie jednym z najlepszych sposobów, aby zobaczyć, jak JavaScript może być używany. Bałagan, przechodząc przez kod w Firebug lub Inspektorze sieci, 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 programowaniem funkcjonalnym sprawia, że JavaScript jest seksowną mieszanką tych dwóch programów, a kiedy i jak używać obu do tworzenia bazy kodu zabójcy, a niesamowite aplikacje sprawią, że będziesz lepszym programistą JavaScript.
Po prostu przeczytanie niektórych książek, zwłaszcza „dobrych części” Crockforda, które jedynie przedstawiają jego opinie na temat tego, co jest dobre w JavaScript, a pominięcie większości NIESAMOWITYCH części JavaScript spowoduje, że postąpisz źle.
Z drugiej strony sprawdzenie kodu napisanego przez kogoś takiego jak Thomas Fuchs da ci znacznie lepszy wgląd w moc pisania niesamowitego i wydajnego JavaScript.
Próba zapamiętania kilku gotchas lub WTF również nie pomoże, zauważysz to, jeśli zaczniesz kodować i przechodzić przez kod biblioteki / frameworka, szczególnie dobrze skomentowany, aby zobaczyć, dlaczego użyli pewnych właściwości / wartości, a nie inne, dlaczego i kiedy dobrze jest używać określonych operandów i operatorów, to wszystko jest w kodzie używanym przez ludzi frameworka. Jak lepiej uczyć się na przykładach? : ^)
W Javascripcie 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 ...
Ważne są również następujące rzeczy:
1) Zmienne podnoszenie. 2) Łańcuchy zakresów i obiekty aktywacyjne.
a potem takie rzeczy: :)
3) wtfjs.com
4) wszystko jest przedmiotem http://www.lifeinafolder.com/images/Js.jpg
JavaScript nie jest wspierać oddzielenie powrotną słowa kluczowego i return ze znakiem nowego wiersza podobnego kodu następującej (lub spróbować go na mojej stronie jsFiddle )
function foo()
{
return
{
bar: 'something'
};
}
$(function()
{
document.write(foo());
});
Nie rozumiem, dlaczego JavaScript nie obsługuje tego stylu, ponieważ znacznie łatwiej jest odczytać bardzo złożony kod źródłowy JavaScript w porównaniu z domyślnym stylem JavaScript.
PS. Pisałem JavaScript prawie 6 lat. Ale właśnie znalazłem ten błąd przy sobie, gdy próbuję wykonać następującą funkcję. Zawsze zwraca wartość niezdefiniowaną. Kiedy używam debugera i wchodzę w tę funkcję, wszystko działa dobrze. Myślę, że powinien to być najgorszy błąd programowy 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') : '');
}
var foo = "bar" +) parser czyta dalej.
var foo = 5i -1;spowoduje ustawienie foo na 4, mimo że każda z nich jest samodzielną prawidłową instrukcją.
Ponieważ JS jest językiem funkcjonalnym, porządny programista JS musi umieć napisać kombinator Y i wyjaśnić, jak to działa.
... o Google Web Toolkit , co oznacza, że Twój projekt javascript prawdopodobnie mógłby zostać opracowany w znacznie bardziej wygodny sposób.