Anders är en webbutvecklare och hårdrockare som gillar brädspel, kaffe och öl.

Detta är ett arkiverat inlägg, som importerats hit för referens. Det kan se konstigt ut och innehålla utdaterad information eller inaktuella åsikter.

Ett roligt och lärorikt JavaScript-quiz

Tidigare i veckan publicerades My JavaScript quiz, författat av Nicholas C. Zakas som kan ses som en guru i JavaScript. Nyfiken kastade jag mig in i testet genast, mindre än 20 minuter efter att jag vaknat.

Kanske var det bristen på morgonkaffet som var orsaken, men jag hade en hel del fel när jag rättade mina svar. Som för att lära mig själv eventuellt andra som läser det här ska jag därför lista de felaktigheter jag hade.

  • ++x och x++. Jag trodde att x+++y (tre plustecken) utlästes x + ++y, vilket alltså skulle innebära att y ökade med 1 innan den lades samman med x. Så är alltså inte fallet, utan i själva verket tolkas det som x++ + y; x och y adderas med x gamla värde, och x ökar med ett genast efteråt.

  • setTimeout sker (självklart) i Window closure. Här var jag ivrig och hakade upp mig på this. Det här är ett nybörjarfel som även duktiga javascriptare blir skyldiga till ibland. Closures kan dock användas för att använda objektets x också. ::: {.CodeRay} ::: {.code} var that = this;setTimeout(function () { alert(that.x);}); ::: :::

  • Strängar vid jämförelser. Om en operand är ett tal, kommer den andra operanden om den är en sträng att konverteras till ett tal (detta gäller oavsett operandens sida om hakparantesen). Om båda är strängar, kommer en jämförelse mot ASCII-värdet att göras (förenklat). Notera här att tal konverterar strängar vid jämförelser; tal har högre prio (eller något).

  • Strängar vid addering. Här konverteras alltid tal till strängar om en sträng förekommer. Strängar har alltså högre prio (eller något). Det är alltså motsatt beteende jämtemot jämförelser. Det visste jag inte.

  • Skillnaden på obj.valueOf() och obj.toString(). Det finns en skillnad. o.valueOf() används när ett värde efterfrågas vid en operation, t ex vid jämförelse eller en addering. toString() däremot används när en representation av objektet efterfrågas, typ vid alert({});.

That's about it. Zakas har nyligen publicerat en bok också, som berättas om i High Performance JavaScript. Jag gillade hans bidrag i Even faster Websites, så den är en kandidat till min "att läsa"-lista.