Inbyggda typer
Nummer och Number
JavaScript hanterar heltal, flyttal och hexadecimala tal som literaler. Vissa implementationer stödjer även oktala tal men det stödjs ej i standarden så vi undviker dem som literaler.
2 // Integer42 // Integer4.2 // Float3.14159265 // Float7.01e11 // Float 7010000000001.4297E-14 // Float 0.0000000000000142970xff // Hexadecimal0x1a0f // Hexadecimal037 // Octal or not? Avoid octal numbers like this. // Never start integer with 0
Math.sqrt(-1) // Fails and returns NaN, Not a Number, special case.parseInt('no way') // Fails and returns NaN.
När en matematisk funktion eller en parsning av ett number misslyckas så returneras värdet NaN
som betyder “Not a number”. Läs mer om Nan. Om man har en större beräkning och en del ger Nan så kommer hela uttrycket att bli Nan. Det kan göra det lite svårt att felsöka en komplex beräkning som ger Nan, men dela upp beräkningen i delar så blir det enklare att felsöka.
När vi jobbar med nummer så stöds de vanliga aritmetiska operatorer som vi känner igen från andra programmeringsspråk.
Det finns en samling matematiska funktioner som är samlade i objektet Math
. Med dessa kan du utföra vanliga matematiska beräkningar.
Math.PI // Constant value for PIMath.random() // Return a random numberMath.tan(2) // Return tangent of 2
Det är objektet Number
som används när du jobbar med nummer. Konvertering av värden sker automatiskt mellan literal och objekt, ofta spelar det ingen roll men det är bra att veta om man vill ha lite extra koll. Kika på objektet Number för att se vilka standardfunktioner som det erbjuder.
Var uppmärksam på Nan och Infinity i dina beräkningar. Se följande exempel.
> 1/0Infinity> 0/0NaN> 0/10
> NaN > Infinityfalse> Infinity > NaNfalse> Infinity < (Infinity + 1)false> Infinity + 1Infinity
Strängar och String
Strängar omsluts med enkelfnutt '
, dubbelfnutt "
eller backticks `
speciella tecken kan escapas med backslash \
på samma sätt som i andra programmeringsspråk. En tom sträng är ''
eller ""
. Strängar kan även innehålla unicode tecken enligt \uXXXX
där XXXX
är fyra hexadecimala siffror.
Strängkonkatenering sker med operatorn +
eller +=
.
Det finns en samling med sträng-funktioner som är samlade i objektet String
.
Typkonvertering
JavaScript konverterar automatiskt mellan nummer och strängar vid behov. Se följande som ett exempel på hur värden av olika typer kan läggas ihop via automatiks typkonvertering.
> 1 + 12> "1" + 1'11'> 1 + "1"'11'> 1 + true2> "1" + true'1true'> true + 12> true + 1 + NaNNaN
Försök undvika att värden av olika typer beräknas på detta atuomatiska sätt, det kan bli en potentiell felkälla i din kod.
Kontrollerad typkonvertering
Vill du ha mer kontroll på hur konvertering sker kan du använda funktionerna parseInt()
och parseFloat()
för att konvertera strängar till nummer och toString()
för att konvertera nummer till strängar.
Notera att toString
anropas som en metod på ett objekt, medan parseInt
och parseFloat
kan anropas som en funktion.
> a = 4242> a.toString()'42'> parseInt("42 mopeder")42
Vid sidan av alla objekt finns även en uppsättning av globala funktioner, där parseInt
och parseFloat
är två av dem.
Boolska värden och Boolean
Det finns ett objekt Boolean
som automatiskt används vid typkonvertering av uttryck till true
och false
. Det kan vara bra att veta att det finns ett objekt i bakgrunden men normalt behöver man inte tänka på det utan kan använda true
och false
som vanliga literaler.
Det finns ingen anledning att explicit använda objektet Boolean
över huvudtaget. Det räcker bra med literalerna true
och false
. Eller som det står i MDN manualen:
“Do not use a Boolean object in place of a Boolean primitive.”
Följande värden är falska: false
, 0, den tomma strängen (""), NaN
, null
, och undefined
. Alla andra värden är sanna, true
.
Ett sätt att omvandla godtyckligt värde till ett boolskt värde är att använda dubbla utropstecken.
!42 // false!!42 // true
Vill vi testa att ovanstående stämmer så kan vi skriva följande konstruktion i webbläsarens devtools.
!42 === false // true!!42 === true // truetypeof(!42) === "boolean" // true
Det är bra att använda devtools för att testa konstruktioner man är fundersam på. Det ger svar direkt.
Att använda två ==
jämför värdet, att använda tre ===
innebär jämförelse även mot datatypen. Det är bra att använda ===
för att undvika bekymmer vid automatisk konvertering av värden.
Datumhantering med objektet Date
Med objektet Date
får vi en mängd metoder för att jobba med datum och tid.
let today = new Date()/** Year, month and day*/console.log(today.getFullYear()) // Displays the current year in the format YYYYconsole.log(today.getMonth()) // Displays a number-representation of the current month, (0-11)console.log(today.getDate()) // Displays a number-representation of the current day, (1-31)
/** Hours, minutes and seconds*/console.log(today.getHours()) // Displays the current hour in your timezone, 24hconsole.log(today.getMinutes()) // Displays the current minuteconsole.log(today.getSeconds()) // Displays the current seconds