title |
---|
Fyrirlestur 8.2 – JavaScript forrit |
Ólafur Sverrir Kjartansson, osk@hi.is
- Segð er kóðabútur sem skilar gildi
- Tala, stengur o.fl.
- Segðir geta innihaldið aðrar segðir
1 + 1
- Skipanir eru samansöfn af segðum
- Forrit eru samansöfn af skipunum
- Einfaldasta skipunin (og segðin, og forritið) er segð með semíkommu
1;
- Semíkomma er statement terminator einsog í Java eða C
- Ekki krafa, Automatic Semicolon Insertion sér um að setja inn ef sleppt
- Þarf að passa, við ættum alltaf að setja inn semíkommu
return
a+b
túlkað sem
return; a+b;
foo = a + b
(d + 1)
túlkað sem
foo = a + b(d + 1);
- Skilgreinum breytur með lykilorðunum
let
,const
eðavar
let foo;
- Getum aukalega gefið gildi úr segð
let foo = 'bar';
const FOO = 1; // breytunöfn eru hástafanæm
- Megum ekki skilgreina aftur breytu sem áður var skilgreind með
let
eðaconst
- Breytur innihalda ekki gildi, þau vísa í þau
- Breytur hafa ekki týpu, gildin hafa týpu
let foo = 1;
let foo = 2; // SyntaxError
Þar sem breytur í JavaScript hafa ekki týpu getum við breytt gildum þeirra.
let a = 'halló heimur';
a = 1;
a = false;
a = undefined;
const
bannar endurskilgreiningu á grunngildi- Megum ekki breyta
const
breytu eftir að hún er skilgreind, fáum villu
const FOO = 1;
FOO = 2; // Fáum TypeError
- Breytur geta heitið hvaða orði sem er
- Mega ekki byrja á tölustaf
- Mega byrja á og nota
$
og_
en engin önnur tákn sem ekki eru stafir eða tölustafir - Getum notað íslensku
let hæ = '😎';
Megum ekki nota þessi orð sem breytu nöfn þar sem þau eru lykilorð, (samt ekki samræmi milli keyrsluumhverfa):
break case catch class const continue debugger default
delete do else enum export extends false finally for
function if implements import interface in instanceof let
new package private protected public return static super
switch this throw true try typeof var void while with yield
- Þegar við keyrum JavaScript forritin okkar gerist það í ákveðnu umhverfi
- Ekki tómt, inniheldur staðlaða hluti og föll sem eiga við umhverfið
- Í vafra höfum við aðgerðir t.d. til að eiga við vefsíðuna, bundið við window
- Í node.js höfum við aðgerðir t.d. til að eiga við skráarkerfið, bundið við process
- Vafrar bjóða upp á föll til að birta og sækja upplýsingar frá notanda
alert()
birtir skilaboð sem notandi verður að samþykkjaconfirm('á að gera þetta?')
birtir skilaboð sem notandi verður að samþykkja eða hafna, skilarboolean
prompt('hvað heitir þú?')
birtir skilaboð og línu fyrir notanda til að svara, skilarnull
eðastring
- Ætti aldrei (eða afskaplega sjaldan) að vera notað
- Höfum betri leiðir sem eru ekki jafn uppáþrengjandi
- Inniheldur stærðfræði fasta og föll
Math.PI
,Math.E
o.fl.Math.cos()
,Math.log()
o.fl.Math.max()
,Math.min()
,Math.floor()
o.fl
- Inniheldur fasta og föll til að eiga við tölur
- Hefur endurbættar útgáfur af fyrri útgáfu af
isNaN
og t.d. sama fyrirparseInt
isInteger()
segir til um hvort tala sé heiltala eða ekkiNumber.MAX_VALUE
,Number.EPSILON
- Munurinn á milli
1
og minnstu floating point tölunnar sem er stærri en1
- Notum til að bera saman tölur vegna vandræða með nákvæmni
0.1 + 0.2 === 0.3; // false
Math.abs(0.3 - (0.1+0.2)) < Number.EPSILON;
// true
- Date hluturinn leyfir okkur að vinna með dagsetningar í JavaScript
- Í grunninn byggt á millisekúndum síðan
1970-01-01 00:00:00 UTC
- Getum skilgreint með ári, mánuði, degi, klukku
- Mánuður byrjar á 0!
const a = new Date();
// Núna
const b = new Date(2020, 0, 1, 0, 0, 0);
// 1. janúar 2020 kl. 00:00:00
- Getum reiknað með tveim
Date
hlutumb - a; // fjöldi millisekúnda þar til b
- get og set föll til að eiga við hluti
getYear
ogsetYear
- o.fl.
- Höfum aðgang að flæðistýringum og lykkjum
- líkjast mjög mikið þeim sem eru í Java
- Stýrum flæði forrita og framkvæmum ítranir
- Í lykkjum getum við notað:
break
til að brjótast út/hætta í lykkjucontinue
til að sleppa rest af lykkju og halda áfram í næstu
if
keyrir kóða aðeins ef segð skilar truthy gildi- Getum keyrt annan kóða ef ekki truthy með
else
- Eða skilgreint fleiri segðir með
else if
- Kóði sem keyra á ætti að vera innan
{
og}
const a = 5;
if (a > 5) {
console.log('stærri en 5');
} else if (a > 1) {
console.log('stærri en 1');
} else {
console.log('1 eða minni');
}
// stærri en 1
while
ogdo .. while
lykkjur leyfa okkur að endurtaka kóða svo lengi sem einhver segð er sönndo .. while
mun alltaf keyra kóða einu sinni áður en segð er athuguð
let i = 1;
while (i++ < 5) {
console.log(i);
}
// 2, 3, 4, 5
while lykkja sem byrjar á að keyra einu sinni í gegn
let i = 1;
do {
console.log(i);
} while (i++ < 5);
// 1, 2, 3, 4, 5
for
lykkjur eru sérhæfðari og nýta mjög algent form á lykkjum:- Setja byrjunargildi
- Athuga núverandi gildi
- Uppfæra gildi
for (<byrjunargildi>;<athuga>;<uppfæra>)
for (let i = 0; i < 10; i = i + 1)
- Getum notað
break
til að hætta í lykkju í miðjum klíðum
- Við getum beitt virkjum beint á breytu með
++
og--
- Ef tala er hún hækkuð um einn eða lækkuð um einn
- Getum stytt okkur leið þegar við notum virkja
a += 1;
í staðinn fyrira = a + 1;
- o.s.fr.
for (let i = 0; i < 100; i++) {
if (i % 2 === 1) {
continue;
}
if (i > 5) {
console.log('Yfir 5, hættum!');
break;
}
console.log(i);
}
// 0, 2, 4, "Yfir 5, hættum!"
- Ef við höfum kóða sem notar
if
ogelse if
mikið getum við notaðswitch
const a = 2;
switch (a) {
case 1:
console.log('a = 1');
break;
case 2:
console.log('a = 2');
break;
default:
console.log('a = ???');
}
// a = 2
- JavaScript notar yfirleitt
lowerCamelCase
fyrir heiti á breytum og föllum - Sá stíll er notaður í stöðluðum föllum
- Hlutir byrja á stórum staf (t.d.
Math
) vegna þess að þeir eru constructors