Hoppa till innehåll

Utmaningar

Installera Node.js, den senaste versionen.

1.1 Bestäm summan, differensen, produkten samt kvoten

Section titled “1.1 Bestäm summan, differensen, produkten samt kvoten”

Skriv uttryck som adderar, subtraherar, multiplicerar och dividerar talen 27 och 15.

(ditt uttryck för additionen här) -> 42
(ditt uttryck för subtraktion här) -> 12
(ditt uttryck för multiplikation här) -> 405
(ditt uttryck för division här) -> 1.8

Testa uttrycket i Node-terminalen.

> 27 + 15
42
> 27 - 15
12
> 27 * 15
405
> 27 / 15
1.8

Observera att kvoten presenteras med decimalpunkt. (För få det format som gäller i Sverige kan (27/15).toLocaleString('sv-SE') användas, vilket ger 1,8. OBS! Detta är bara intressant då ett tal med decimaler, flyttal, ska presenteras.)

1.2 Varför är det en differens mellan differenserna?

Section titled “1.2 Varför är det en differens mellan differenserna?”

Skriv in uttrycket 0.2 - 0.1 i Node-terminalen. Skriv därefter in uttrycket 1.2 - 1.1 i Node-terminalen. Resultat? Varför?

Heltal kan lagras exakt men…

Terminal window
> 0.2 - 0.1
0.1
> 1.2 - 1.1
0.09999999999999987

Flyttal kan inte representeras exakt utan bestäms till ett värde väldigt nära det korrekta värdet.

1.3 Två upphöjt till fyra på flera sätt

Section titled “1.3 Två upphöjt till fyra på flera sätt”

24 kan till exempel uttryckas som 2 * 2 * 2 * 2. Skriv två uttryck som gör samma sak genom att använda Math.pow() respektive den aritmetiska operatorn **.

Terminal window
> Math.pow(2, 4)
16
> 2 ** 4
16

1.4 Heltal uttryckta med talbaserna 16 och 2

Section titled “1.4 Heltal uttryckta med talbaserna 16 och 2”

Skriv ett uttryck som ger det decimala värdet för det hexadecimala värdet #FFFF00 (RGB-färgen gul), samt ett uttryck som ger det decimala värdet av det binära talet 101010.

(ditt uttryck för det hexadecimala talet) -> 16776960
(ditt uttryck för det binära talet) -> 42

JavaScript kan tolka heltalsliteraler på flera sätt utöver värden angivna med talbasen 10.

Terminal window
> 0xffff00
16776960
> 0b101010
42

Det går även att använda versaler när hexadecimala tal skrivs, 0xFFFF00. (Många anser dock att det är svårare att läsa ett hexadecimalt värde skrivet med versaler, men nu kan det skrivas tydligare med 0xFF_FF_00.)

Skapa ett uttryck som ger det största talet av 14, 3, 27 och -4.

(ditt uttryck för det största talet) -> 27

Botanisera lite kring det inbyggda objektet Math. Du kan läsa om Math i kurslitteraturen eller på MDN.

> Math.max(14, 3, 27, -4)
27

Skriv uttryck som använder en samma Math-funktion för att ta bort decimaler men behåller heltalsdelen av ett tal som är antigen positivt eller negativt.

(ditt uttryck för talet 23.852) -> 23
(ditt uttryck för talet -23.852) -> -23
(ditt uttryck för talet -7.119) -> -7
> Math.trunc(23.852)
23
> Math.trunc(-23.852)
-23
> Math.trunc(-7.119)
-7

1.7 Bestäm antalet hela dagar och återstående timmar

Section titled “1.7 Bestäm antalet hela dagar och återstående timmar”

Skapa två uttryck som ger antalet hela dagar respektive återstående timmar som 843 timmar motsvarar.

(ditt uttryck för antalet dagar här) -> 35
(ditt uttryck för återstående timmar här) -> 3

Testa uttrycken i Node-terminalen.

> Math.trunc(843 / 24)
35
> 843 % 24
3

Skriv ett uttryck som bestämmer antalet tecken i strängen DET ÄR GEMENT VAD MÅNGA VERSALER DENNA TEXT INNEHÅLLER.

(ditt uttryck som ger datatypen) -> 54
> 'DET ÄR GEMENT VAD MÅNGA VERSALER DENNA TEXT INNEHÅLLER'.length
54

1.9 Byt ut och gör om till små bokstäver

Section titled “1.9 Byt ut och gör om till små bokstäver”

Skriv ett uttryck som ersätter VERSALER med gemener i strängen DET ÄR GEMENT VAD MÅNGA VERSALER DENNA TEXT INNEHÅLLER för att därefter göra om alla tecken till gemener (små bokstäver).

(ditt uttryck som ersätter och gör om) -> 'det är gement vad många gemener denna text innehåller'
  • Modifierade versioner av strängen ska skapas.
> 'DET ÄR GEMENT VAD MÅNGA VERSALER DENNA TEXT INNEHÅLLER'.replace('VERSALER', 'gemener').toLowerCase()
'det är gement vad många gemener denna text innehåller'

Först bestäms uttrycket 'DET ÄR GEMENT VAD MÅNGA VERSALER DENNA TEXT INNEHÅLLER'.replace('VERSALER', 'gemener') vilket ger den nya strängen 'DET ÄR GEMENT VAD MÅNGA gemener DENNA TEXT INNEHÅLLER'. Denna sträng görs i sin tur om till en helt ny sträng innehållande enbart gemener genom ett anrop av metoden toLowerCase().

Skapa ett uttryck som ger 10 textrader där varje textrad innehåller Hej Monica, hej på dig Monica!. Texten får bara anges en gång.

Det inbyggda objektet String tillhandahåller flera metoder för att arbeta med strängar.

> 'Hej Monica, hej på dig Monica!\n'.repeat(10)
'Hej Monica, hej på dig Monica!\n' +
'Hej Monica, hej på dig Monica!\n' +
'Hej Monica, hej på dig Monica!\n' +
'Hej Monica, hej på dig Monica!\n' +
'Hej Monica, hej på dig Monica!\n' +
'Hej Monica, hej på dig Monica!\n' +
'Hej Monica, hej på dig Monica!\n' +
'Hej Monica, hej på dig Monica!\n' +
'Hej Monica, hej på dig Monica!\n' +
'Hej Monica, hej på dig Monica!\n'

Lägg märke till det avslutande nyradstecknet \n, vilket krävs för att skapa en ny rad efter texten. (Är det nördigt att uppmärksamma att Node.js visar resultatet som en konkatenering av 10 strängar istället en enda lång sträng?)

Skriv ett uttryck som ger datatypen för resultatet av uttrycket '2' * '3'.

(ditt uttryck som ger datatypen) -> 'number'
> typeof ('2' * '3')
'number'

Då JavaScript inte ser någon större mening med att multiplicera två strängar med varandra (vad innebär det?) så typomvandlar JavaScript automatiskt strängen '2' till talet 2 och strängen '3' till talet 3 och multiplicerar de typomvandlade värdena, vilket ger produkten 6, som är ett värde av typen Number. Parenteserna behövs för att operatorn typeof har högre prioritet än operatorn *. Tas parentesen bort blir resultatet NaN. Varför? Det som händer då är att JavaScript bestämmer typeof '2' till 'string', vilket inte kan typomvandlas till ett tal, varför JavaScript bestämmer det fullständiga uttryckets värde till NaN,Not a Number.

Skriv ett uttryck som visar om talet 17 är större än talet 11. Skriv även ett uttryck som visar om talet 17 är mindre än 11.

(ditt uttryck som visar om 17 är större än 11) -> true
(ditt uttryck som visar om 17 är mindre än 11) -> false
> 17 > 11
true
> 17 < 11
false

En minnesregel är att jämförelseoperatorn (större än>, mindre än <) ska “gapa” åt det värde som är störst för att resultatet ska bli true.

störst > minst -> true
minst < störst -> true
minst > störst -> false
störst < minst -> false
> 17 > 11
true
> 11 < 17
true
> 11 > 17
false
> 17 < 11
false

Skriv två uttryck som bestämmer om två booleska värden är true respektive om minst ett av två booleska värden är true.

(ditt uttryck som visar om två booleska värden är true) -> true (ditt uttryck som visar om ett av två booleska värden är true) -> true

> false && false
false
> false && true
false
> true && false
false
> true && true
true
> false || false
false
> false || true
true
> true || false
true
> true || true
true
  • Operatorn && (AND, OCH) kräver att båda värdena är true för att resultatet ska bli true.
  • Operatorn || (OR, ELLER) kräver att minst ena värdet är true för att resultatet ska bli true.

Skriv ett uttryck som skapar en array-literal innehållande värdena 3, -7, 12, 29, 9, 42 och -2.

> [3, -7, 12, 29, 9, 42, -2]
[ 3, -7, 12, 29, 9, 42, -2 ]

Skriv ett uttryck som skapar en objekt-literal innehållande värden om hunden Killer (name), 3 år (age), 2,3 kg (weight), som är av rasen Chihuahua (breed).

> { name: 'Killer', age: 3, weight: 2.3, breed: 'Chihuahua' }
{ name: 'Killer', age: 3, weight: 2.3, breed: 'Chihuahua' }
CCBY