programmeringsspråk - Vad bör varje JavaScript-programmerare veta?


Finns det en uppsättning saker som varje JavaScript-programmerare bör kunna för att kunna säga "Jag kan JavaScript"?

Svar #1

Inte jQuery. Inte YUI. Inte (osv. osv.)

Ramar kan vara användbara, men de döljer ofta de ibland fula detaljerna i hur JavaScript och DOM faktiskt fungerar för dig. Om ditt mål är att kunna säga "Jag kan JavaScript", då är det motsatt att investera mycket tid i en ram.

Här är några funktioner i JavaScript-språket som du bör känna till för att förstå vad det gör och inte bli lurad, men som inte är omedelbart uppenbara för många människor:

  • Att object.prop och object['prop'] är samma sak (så kan du snälla sluta använda eval, tack); att objektets egenskaper alltid är strängar (även för arrayer); vad for...in används till (och vad det inte används till).

  • Property-sniffing; vad undefined är (och varför det luktar); varför den till synes lite kända in-operatorn är fördelaktig och skiljer sig från typeof/undefined-kontroller; hasOwnProperty; syftet med delete.

  • Att Number-datatypen egentligen är en float; de språkoberoende svårigheterna med att använda floats; att undvika parseInt-oktalfällan.

  • Nästlade funktionsomfång; nödvändigheten av att använda var i det omfång du vill för att undvika oavsiktliga globala variabler; hur omfång kan användas för closure; problemet med loopar i closure.

  • Hur globala variabler och window-egenskaper kolliderar; hur globala variabler och dokumentelement inte borde kollidera men gör det i IE; behovet av att använda var även i globalt scope för att undvika detta.

  • Hur function-satsen agerar för att 'hoista' en definition före koden som föregår den; skillnaden mellan funktionssatser och funktionsuttryck; varför namngivna funktionsuttryck inte bör användas.

  • Hur konstruktörsfunktioner, prototype-egenskapen och new-operatorn verkligen fungerar; metoder för att utnyttja detta för att skapa det vanliga klass-/subklass-/instanssystemet som du egentligen ville ha; när du kanske vill använda stängningsbaserade objekt istället för prototypning. (Det mesta JS-handledningsmaterial är helt fruktansvärt på detta; det tog mig år att få det rakt i huvudet.)

  • Hur this bestäms vid anropstid, inte binds; hur metodöverföring därför inte fungerar som du förväntar dig från andra språk; hur closures eller Function#bind kan användas för att kringgå det.

  • Andra funktioner i ECMAScript femte upplagan som indexOf, forEach och de funktionella programmeringsmetoderna på Array; hur man fixar äldre webbläsare för att säkerställa att du kan använda dem; använda dem med inbyggda anonyma funktionsuttryck för att få kompakt, läsbar kod.

  • Flödet av kontroll mellan webbläsaren och användarkoden; synkron och asynkron exekvering; händelser som utlöses inom kontrollflödet (t.ex. fokus) kontra händelser och tidsgränser som inträffar när kontrollen återvänder; hur anrop av en påstått synkron inbyggd funktion som alert kan sluta med att potentiellt katastrofal återinträde uppstår.

  • Hur skriptning över fönster påverkar instanceof; hur skriptning över fönster påverkar kontrollflödet mellan olika dokument; hur postMessage förhoppningsvis kommer att fixa detta.

Se detta svar angående de sista två föremålen.

Framför allt bör du betrakta JavaScript kritiskt, och erkänna att det av historiska skäl är ett ofullkomligt språk (ännu mer än de flesta språk), och undvika dess största problemområden. Crockfords arbete på detta område är definitivt värt att läsa (även om jag inte håller med honom till 100 % om vilka som är de "bra delarna").

Svar #2

Att det kan stängas av.

Svar #3

Att förstå det som står i Crockfords Javascript: The Good Parts är en ganska bra antagelse att en person är en skicklig JS-programmerare.

Du kan ganska mycket veta hur man använder ett bra bibliotek som JQuery och ändå inte känna till de dolda delarna av Javascript.

En annan punkt är felsökningsverktyg i olika webbläsare. En JS-programmerare bör veta hur man felsöker sin kod i olika webbläsare.

Åh! Och att kunna JSLint kommer helt klart att såra dina känslor!!

Svar #4

Om du vill vara en riktig JavaScript-ninja bör du känna till svaren på varje fråga i Perfection kills JavaScript-quizet.

Ett exempel för att väcka din aptit:

(function f(f){ 
  return typeof f(); 
})(function(){ return 1; });

Vad returnerar detta uttryck?

  • nummer
  • «undefined»
  • “funktion ”
  • Fel

Svar #5

Du kan inte JavaScript om du inte kan:

  1. Stängningar
  2. Prototypbaserad arv
  3. Modulmönstret
  4. W3C-DOM
  5. Hur evenemang fungerar

Svar #6

..att javascript inte är java :)

Många, många personer som börjar med webbplatsutveckling har sagt till mig att javascript bara är enkel java!

Svar #7

  1. Bekanta dig med åtminstone ett Javascript-bibliotek (Jquery, Prototype, etc).

  2. Lär dig hur du använder felsökningsverktygen i de stora webbläsarna (MSIE 7-8, Firefox, Chrome, Safari)

  3. Läs på om branschen: Douglas Crockfords webbplats är en skattkista medan Ajaxian.com är en bra blogg för att hålla sig uppdaterad om nya, intressanta och/eller udda idéer för Javascript. Det finns ett antal andra resurser men det är de som hjälpte mig mest.

Svar #8

Javascript objekt och funktioner som förstklassiga medborgare, återuppringningar, inte att förglömma händelser och sedan JQuery.

Svar #9

Den där Javascript är inte något som kan läras på en timme!

Svar #10

Variabler är globala om de inte deklareras som lokala!!

Dåligt (DoSomething() anropas endast 10 gånger):

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

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

CountToFive();

Bra (DoSomething() kallas 50 gånger som avsett):

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

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

CountToFive();

Svar #11

Hur man använder de bra delarna, och hur man undviker de fruktansvärda delarna.

Relaterade artiklar