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.prop
i 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 undefined
jest (i dlaczego pachnie ); Dlatego pozornie mała znany in
operator jest korzystne, a inna z typeof
/ undefined
kontroli; hasOwnProperty
; cel delete
.
Że Number
typ danych jest naprawdę zmiennoprzecinkowy; niezależne od języka trudności z używaniem pływaków; unikając parseInt
pułapki ósemkowej.
Zasięg funkcji zagnieżdżonych; konieczność użycia var
w zakresie, w którym chcesz uniknąć przypadkowych globali; jak można stosować lunety do zamykania; problemem pętla zamknięcia .
Jak window
zderzają 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ż var
w zakresie globalnym, aby tego uniknąć.
Jak function
dział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, prototype
właściwość i new
operator 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 this
ustala 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#bind
mogą być wykorzystane do obejścia tego.
Inne ECMAScript Fifth Edition, takich jak indexOf
, forEach
i 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 alert
moż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 postMessage
mam 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”).
this
jest, 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'])()
-> false
i 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
var
na górze funkcji, ponieważ nie wprowadza w błąd co do wielkości zakresu zmiennej. js2-mode
narzeka, jeśli masz var i
dwie osobne for
pę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 var
oddzielać 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 . length
metoda 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 = 5
i -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.