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

368

Czy istnieje zbiór rzeczy, które powinien wiedzieć każdy programista JavaScript, aby móc powiedzieć „znam JavaScript”?

gath
źródło

Odpowiedzi:

590

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”).

bobince
źródło
80
Ahhhh, w końcu przemyślana, dokładna odpowiedź. Gdybym mógł +10, zrobiłbym to. Znajomość frameworka nie oznacza, że ​​możesz skutecznie programować JavaScript.
Tim Down
6
Wielkie dzięki za dobrze przemyślaną odpowiedź. Chciałbym dodać, że użycie frameworka może być naprawdę korzystne, jeśli wiesz, jak się to robi. Powinieneś nauczyć się robić te rzeczy sam, zanim zaczniesz korzystać z ram.
Javier Parra,
4
@Daniel: w rzeczywistości tak nie 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.
bobince
7
Co za garnek! To nie tak, że znajomość różnych dziwactw przeglądarki czyni cię lepszym koderem JS. Może większe uznanie wśród rówieśników ... Abstrakcje ułatwiają życie i są istotną częścią JS, więc powiedziałbym, że znajomość frameworka czyni cię lepszym koderem JS niż ten, który nie chce i chce robić rzeczy na dłuższą metę.
Vince Panuccio,
19
Sir Psycho: zauważ, że w żadnej z tych odpowiedzi nie ma wzmianki o DOM, a są to duże biblioteki, które mogą ci pomóc. Framework nie może cię chronić przed żadną z wymienionych tu rzeczy . Te rzeczy są ważne dla każdego, kto robi skrypty przeglądarki, używając frameworka lub nie.
Tim Down
248

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

graficzny
źródło
12
+1, jestem tak zmęczony stronami, że nawet nie zawracają sobie głowy podstawami pełnej wdzięku degradacji, ponieważ „jest to takie trudne i wszyscy mają włączoną obsługę javascript”.
wasatz
27
+1. Strona, która nie działa bez JavaScript, to strona, która będzie delikatna nawet po włączeniu JS.
bobince
9
@iconiK Po prostu pójdę i powiem wszystkim moim klientom rządowym, którzy mają globalnie wyłączony JavaScript ze względów bezpieczeństwa, że ​​wszyscy są kretynami, prawda?
graphicdivine
16
-1 to nie na temat i tak naprawdę nie ma nic wspólnego z wiedzą o javascript jako języku. Warto wziąć pod uwagę przy projektowaniu aplikacji internetowej, ale nadal nie jest to odpowiedź, która należy do tego wątku.
TM.
24
@TM, nie, to naprawdę ważna uwaga. Powinno to znajdować się w Twojej głowie, gdy testujesz wartości przed wstawieniem ich do bazy danych lub masz jedyny sposób na zalogowanie się na swojej stronie za pomocą fantazyjnego wyskakującego okienka. Mówiąc o tym ... Myślę, że muszę coś sprawdzić.
Elizabeth Buckwalter,
75

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 !!

bron
źródło
+1 Zapomnij o tej książce, doskonała rekomendacja.
David
8
Istnieje również wiele pouczających i wnikliwych filmów Crockford na developer.yahoo.com/yui/theater - i myślę, że nie muszę wspominać o crockfordfacts.com :-)
ndim
+1 - JSLint jest cudowną rzeczą, gdy próbujesz opracować JS dla frameworka, który ma zero wbudowanej obsługi debugowania ( kaszel Siebel, kaszel PDF).
J. Polfer,
49

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
Skilldrick
źródło
10
Zobacz moje odpowiedzi: codingspot.com/2010/02/…
CMS
@CMS Bardzo dobrze! Czy naprawdę dobrze się czułeś za pierwszym razem, czy obejmuje to jakieś badania?
Skilldrick
7
Skilldrick: Myślę, że mam je wszystkie po raz pierwszy, jestem częstym czytelnikiem standardu ECMA-262 (wiem, jestem dziwakiem :-)
CMS
46

Nie znasz JavaScript, jeśli nie wiesz:

  1. Domknięcia
  2. Dziedziczenie prototypowe
  3. Wzór modułu
  4. W3C-DOM
  5. Jak działają wydarzenia
edwin
źródło
Naprawdę podoba mi się ta odpowiedź. Pomaga dostrzec ciemne obszary w twojej wiedzy. Zdarzenia są jedyną rzeczą, która wciąż jest dla mnie nieco niejasna na tej liście kontrolnej (jeśli wzorzec modułu oznacza „nie blokuj globalnej przestrzeni nazw”, a więc obejmuje zakresy i operator var).
silviot
11
Argumentowałbym to You don't know JavaScript if you don't know The W3C-DOM. Dwie rzeczy są różne.
gblazex
37

..to javascript to nie java :)

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

Sripathi Krishnan
źródło
+1 Ten punkt jest dość fundamentalny!
amelvin
71
„JavaScript to Java, tak jak dywan to samochód”.
Josh Lee
1
JavaScript jest mniej więcej tak podobny do Java, jak C # jest podobny do C. Na pewno składnia wygląda trochę podobnie, ale jest o wiele inna.
Earlz
4
chyba że korzystają z Google Web Toolkit
Afriza N. Arief
Co ciekawe, Microsoft oparł funkcje daty zgodne z Y2k w JScript dla IE3 na java.util.Date.
Bayard Randel
27
  1. Zapoznaj się z co najmniej jedną biblioteką JavaScript (Jquery, Prototype itp.).

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

  3. 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.

David
źródło
Poważnie, dlaczego głosowanie w dół?
David
+1 Zbyt dużo taktycznego głosowania, poważnie ludzie powinni głosować za dobrymi odpowiedziami, a nie tylko próbować narzucić swoją odpowiedź na szczyt.
amelvin
1
@Murali VP Założyłem „znanie” Javascript w kontekście przeglądarek. Zaraz po jakimś odpowiedniku hello world, będziesz musiał dowiedzieć się, jakie są błędy logiczne i błędy w czasie wykonywania, które mogą być różne w zależności od tłumacza. Nie twierdziłbym, że znam jakiś język, gdybym nie wiedział, jak go debugować. Jeśli chodzi o wymagania ramowe, Javascript przypomina trochę wczesne C, gdzie subtelne różnice w implementacji sabotują nieostrożne; jQuery i prototypowie nadają połysk tym różnicom i sprawiają, że Javascript jest niezawodnym narzędziem, dodając dodatkowe wywołania API w celu zwiększenia wydajności. (ciąg dalszy)
David
@Murali VP Aby być uczciwym, Javascript przeszedł długą drogę, odkąd zacząłem go używać w latach 90-tych i, z wyjątkiem Microsoftu, inni tłumacze JavaScript wykonali imponującą pracę, aby przestrzegać specyfikacji i grać uczciwie.
David
@David dzięki za miłe wyjaśnienie. Zwykle się z tobą zgadzam.
Murali VP
24

Obiekty JavaScript i działają jako pierwszorzędni obywatele , oddzwaniania , nie zapominając o zdarzeniach, a następnie JQuery .

Sarfraz
źródło
20
Ah jQuery, przesadzona platforma JS!
Murali VP,
24

Javascript nie jest czymś, czego można się nauczyć w ciągu godziny!

Ashwin Prabhu
źródło
4
ale wydaje się, że jest to popularne przekonanie
Livingston Samuel
23

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();
theycallmemorty
źródło
2
Nigdy nawet tego nie rozważałem. Bardzo dobra uwaga.
oliwka
6
Staram się przyzwyczaić for (var i=0;we wszystkich moich pętlach
ghoppe
2
Crockford woli umieścić 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ę.
Kragen Javier Sitaker
Nie obchodzi mnie, czy to nie ma zasięgu. Nie mogę znieść faktu, że zmienna zadeklarowała 20 linii, zanim zostanie użyta
Juan Mendes,
8

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.

amelwina
źródło
+1 za zbieranie cycków od Douglasa Crockforda!
gath
1
Myślałem, że JavaScript nazywał się Mocha?
1
@Kinopiko Według mojej książki „Javascript: The Definitive Guide” 3ed (czerwiec 1998) Davida Flanaghana nazywała się LiveScript.
amelvin
@gath Dzień, w którym uczysz się czegoś, to dobry dzień!
amelvin
1
@amelvin Każdy dzień jest dniem szkolnym.
Pułkownik Sponsz
8

Trzeba powiedzieć, że „wiem JavaScript”:

  1. JavaScript jest dobry, ale DOM jest problemem
  2. Problemy z przeglądarkami mogą doprowadzić Cię do szaleństwa
  3. O ile kod nie zostanie przetestowany w co najmniej 4 różnych dobrych przeglądarkach , nie można powiedzieć, że jest wolny od błędów
  4. Zamknięcie .............. Musisz wiedzieć
  5. Jego prototyp oparty ........... Nice one zabawnie się tego nauczyć
  6. słowo kluczowe debugger ... Pomaga w kryzysie
Anil Namde
źródło
Ładna lista, dość szczupła. Śmieję się z dobrych przeglądarek „4”. :) Myślę, że numer 7 powinien być zdrową nienawiścią do przeglądarek IE w wersji 8.
Shyam,
@Shyam, co sprawia, że ​​uważasz, że nie powinniśmy mieć zdrowej nienawiści do IE8? Nadal mam problemy z IE8 ... problemy, które są tylko w IE8.
Tracker1
@ Tracker1: Zawsze pojawią się problemy. I bicie przeglądarki, której nie dotknąłem, cóż, byłoby to trochę niesprawiedliwe. Właśnie dlatego śmiałem się z 4 dobrych przeglądarek: „Firefox, Chrome, Safari i Opera” to jedyne, dla których rozwijam. Przestałem hakować IE, po prostu uruchamiam kod Fisher Price, tak jakby JavaScript była wyłączona.
Shyam
7

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

ericteubert
źródło
1
+1 To świetne wyjaśnienie, jak zatrzymać ssanie JavaScript. Warto je później obejrzeć: yuiblog.com/crockford
pułkownik Sponsz
Kolejna dobra prezentacja Crockfod (4 części „The JavaScript Programming Language”) video.yahoo.com/watch/111593/1710507
Alex K.,
7

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ę.

Khainestar
źródło
Równie dobrze możesz odinstalować swoją przeglądarkę internetową. Obecnie bardzo niewiele osób wyłącza javascript. Ci, którzy prawdopodobnie nie muszą przeglądać sieci. Jedynym wyjątkiem jest to, że roboty indeksujące muszą mieć dostęp do treści publicznej i nie mogą polegać na JS.
Jean Vincent
Bardziej interesuje mnie zapewnienie dostępu do rzeczy innych niż JS. Znam osoby, które przeglądają strony z wyłączonym JS lub używają czytników ekranu. Nie zawsze dobrze się bawią z JS. Widziałem witryny, w których prosta strona logowania jest przesyłana przez ajax bez żadnych kreacji zastępczych. Bez JS, bez logowania. Strona nawet nie korzysta z dużej ilości JS, tylko do przesyłania formularzy.
Khainestar
Uważam, że użytkownicy, którzy celowo wyłączają JS, jak sugerowałeś, są dziś bardzo rzadcy, na pewno dużo mniej niż 10 lat temu. Dlatego nie rozumiem, dlaczego powinniśmy zaprojektować witrynę dwa razy dla osób, które tak naprawdę nie chcą i tak odwiedzać witryny. Więc w twoim przykładzie nie mogą się zalogować, więc co? Drugą rzeczą jest to, że absolutnie nie ma możliwości zaprojektowania nowoczesnej strony bez JS.
Jean Vincent
6

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.

Michiel van der Blonk
źródło
1
Zamknięcie ma miejsce niezależnie od tego, czy dbasz o to, czy nie. Jest potężny, ale można go łatwo nadużywać. Nie znasz języka, jeśli nie wiesz, jak on działa.
gblazex
Oprócz zamknięć szkód może powodować, podobnie jak wycieki pamięci, szczególnie w naszym prawdziwym przyjacielu Internet Explorerze 6.
Marcel Korpel
4

Po przeczytaniu wszystkich wyżej wymienionych, ale także perfekcyjnie nauczyć Javascript za pomocą ramy jak jQuery. Prawda jest taka, że ​​to pierwszy sposób, w jaki wielu ludzi wybrało JS. Nie ma w tym wstydu.

zupa
źródło
4

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.

mykhal
źródło
3

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.

duffymo
źródło
2
+1 Jquery zrewolucjonizowało moje używanie javascript.
amelvin
1
Dobry zarys argumentów. Rozbudowa byłaby świetną odpowiedzią.
Donal Fellows
jQuery zmusza cię do przejścia w tryb proceduralny. Wolę pisać OO JS
Juan Mendes,
Orientacja obiektowa nie ma nic magicznego. Wolałbym używać frameworka zaprojektowanego przez Johna Resiga i używanego przez tysiące innych programistów, niż cokolwiek, co napisalibyśmy, niezależnie od trybu.
duffymo
3

Ten javascript jest najczęściej używanym językiem na świecie. (Prawdopodobnie)

zaf
źródło
8
Najbardziej rozpowszechnionym rodzimym językiem naturalnym jest mandaryński. Czy wiedząc, że to czyni cię mówcą mandaryńskim? Czy znajomość tego faktu miałaby cokolwiek wspólnego z twoją znajomością języka?
Zano
11
Najczęściej stosowanym językiem na świecie jest kod genetyczny DNA, który kontroluje syntezę białka w komórkach.
Ernelli,
Przed mandaryńskim i DNA najpierw należy zastosować język miłości: w ten sposób wygrywa. BAM!
Christopher
3

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? : ^)

christos constandinou
źródło
+1 za nie czczenie Crockforda. Jego poglądy traktuję jak kaznodzieję w kościele. Szanuję to, co mówią, ale biorę to wszystko z odrobiną soli.
Juan Mendes,
2

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 ...

caltuntas
źródło
1
W rzeczywistości kompilatory przeglądarki bardzo dobrze optymalizują kod.
Eduardo,
1
Chrom jest bardzo inteligentny w optymalizacji kodu, ta odpowiedź jest po prostu nieprawda ze wszystkimi nowymi silnikami JS
Juan Mendes
A co z przeglądarkami mobilnymi IE?
caltuntas,
1

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

kupa
źródło
0
  1. Wiedząc, że istnieje życie zi bez with() i gdzie wytyczyć granicę.
  2. Za pomocą throwinstrukcji można tworzyć niestandardowe błędy, aby celowo zatrzymać środowisko wykonawcze javascript.
FK82
źródło
-1

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') : '');
}
Władca dusz
źródło
3
W JavaScript znaki nowego wiersza zwykle działają jako separatory instrukcji; tylko wtedy, gdy niemożliwe jest zakończenie instrukcji (np. var foo = "bar" +) parser czyta dalej.
Marcel Korpel
Kolejny jsFiddle. jsfiddle.net/Soul_Master/BxrDJ
Soul_Master
2
@Marcel - To nie jest dokładnie prawda; na przykład dwie linie var foo = 5i -1;spowoduje ustawienie foo na 4, mimo że każda z nich jest samodzielną prawidłową instrukcją.
Ben Blank
4
Wynika to z faktu, że język automatycznie wstrzykuje średniki do oddzielnych instrukcji. To jest gotcha z językiem. Twoje oświadczenie zwrotne zostanie przekonwertowane na: return; {key: value,} Aby uniknąć tego problemu, powinieneś zastosować praktykę umieszczania średników w tym samym wierszu, na przykład: return {key: value}; Zrób też przysługę i weź kopię Douglas Crockford: The Good Parts. Jest to wyraźnie wspomniane w książce.
Rajat
@Ben - Ciekawa sprawa, dziękuję za wskazanie na to. To powiedziawszy, zalecałbym nie polegać na tych przypadkach krawędzi i po prostu umieścić wszystko w jednym wierszu kończącym się średnikiem i umieścić kod w wielu wierszach tylko wtedy, gdy wiersz kończy się czymś, co instrukcja lub wyrażenie po prostu nie może zakończyć .
Marcel Korpel,
-3

Ponieważ JS jest językiem funkcjonalnym, porządny programista JS musi umieć napisać kombinator Y i wyjaśnić, jak to działa.

użytkownik187291
źródło
1
Co jest złego w tym, że można napisać kombinator Y? I tak javascript jest językiem funkcjonalnym. Jeśli chcesz powiedzieć, że „znasz javascript”, konieczne jest dobre zrozumienie programowania funkcjonalnego.
Raynos,
C może być również używany jako język funkcjonalny.
kzh
Czytałem ostatnio o kombinatorze Y, rozumiem, jak działa i w jakich przypadkach można go użyć ... ale nigdy nie znalazłem przypadku, w którym nie mogłem przepisać problemu, aby nie potrzebować kombinatora Y.
Evert
-5

... o Google Web Toolkit , co oznacza, że ​​Twój projekt javascript prawdopodobnie mógłby zostać opracowany w znacznie bardziej wygodny sposób.

Viktor Sehr
źródło
2
GWT nie jest tak naprawdę JavaScript, jest to Javaish sposób pisania JavaScript.
Livingston Samuel
... i każdy programista JavaScript powinien o tym wiedzieć.
Viktor Sehr
że twój projekt javascript prawdopodobnie mógłby zostać opracowany w znacznie bardziej wygodny sposób.
Viktor Sehr
6
Osobiście uważam, że JavaScript jest łatwiejszy w obsłudze niż Java.
timw4mail