A JavaScriptet eredetileg Mocha néven hozták létre 1995-ben, de emlegették Netscape Scripting Language néven is. A JavaScript nyelvre hatással volt a Java és C nyelv, de azoktól független nyelv. A HTML 2.0 és 3.0 ajánlások idején a weblapok interaktivitása kimerült a linkekben és elküldhető táblázatokban. Nem volt JavaScript és Java. A Mocha-t később átnevezték LiveScript-re, amelyből lett a JavaScript. A JavaScript név felvétele után lett leginkább hasonló a Java szintaktikájához.
Manapság szokás az ECMA script egy dialektusaként beszélni róla. Az ECMAScript a JavaScript(Netscape) és a JScript(Microsoft) által létrehozott nyelvekből alkotott szabvány. A szabványosítást a Netscape kezdeményezte 1996-ban, az első ECMAScript szabvány 1997-ben jelent meg. Ezt követően újabb szabvány jelent meg 1998, majd 1999-ben. A negyedik szabványt sokáig készítették de a mai napig nem készült el. 2009-ben megalkották az ötödik szabványt. Az ötödiket 5.1 verzió számmal 2011-ben újra kiadták. A hatodik 2016-ban jelent meg és azóta évente jelenik meg új szabvány.
Megjelent szabványok:
Az egyes szabványokra rövidítéssel szoktunk hivatkozni. A 2016-os verzióra például ES7 néven hivatkozunk.
Az anyagrész feldolgozásához a következők ismerete szükséges:
A JavaScript beilleszthető a weboldal forrásába, de külön állományban is tarthatjuk, ugyanakkor megvalósítható egy tagen belül is. Ha egy weboldalon az adott tagen belül valósítjuk meg, akkor inline javascriptről beszélünk. A weblapon belül „script” elemek közé helyezett kód esetén internal javascriptről beszélünk. Ha külön állományba tesszük a kódot, akkor external javascriptről beszélünk.
A következőkben ezekre látunk egy-egy példát.
A JavaScript soron belül az adott objektumnál van megvalósítva.
Internal megvalósítás esetén a JavaScript kódot állományon belül hozzuk létre. Ez lehet a HTML fej vagy törzs része egyaránt.
A JavaScriptet külön állományban is megvalósíthatjuk. Ezt nevezzük External megvalósításnak. A HTML oldalon csak egy hivatkozást teszünk az adott JavaScript állományra.
<!doctype html> <html> <head> <meta charset="utf-8"> <title>SWBin</title> <script src="script.js"></script> </head> <body> <button onclick="csinald()">Indul</button> </body> </html>
function csinald() { alert('Helló Világ'); }
Ha JavaScript kódunk olyan karaktereket is tartalmaz, amely majd a weboldalon megjelenhet, akkor szükség lehet a kódolás megadására. Ezt a script elem charset tulajdonságával adhatjuk meg.
<script src="myscripts.js" charset="UTF-8"></script>
A JavaScript elemet sokszor ezért teszik törzs rész végére, hogy a weboldal betöltődjön, mire lefut a JavaScript kód.
A böngészők ma már támogatják a defer attribútumot, aminek hatására a JavaScript kód csak akkor hajtódik végre, amikor a weblap már betöltődött.
<!DOCTPYE html> <html> <head> <meta charset="utf-8"> <title>SWBin</title> <script src="script.js" defer></script> </head> <body> <button onclick="csinald()">Indul</button> </body> </html>
Adott a következő kód:
<button onclick="alert('Helló Világ');">Indul</button>
Milyen megvalósításról beszélünk? Válasszon a következők közül:
A megjegyzést a Javascript értelmező nem veszi figyelembe.
// egy soros megjegyzés
/* több
soros
megjegyzés
*/
A többsoros megjegyzésbe nem ágyazható másik többsoros megjegyzés.
/********************************* Nagy János, 2022 Megjegyzés példák *********************************/ console.log('Nagy János'); # a nevünk kiíratása console.log('JavaScript'); # a programozási nyelv kiíratása
A JavaScript kiviteli felülete a böngésző. Négy lehetőségünk van.
A konzol nem az a felület, ami alapértelmezésként megjelenik egy böngészőben. A console a fejlesztők felülete, amely általában F12 billentyűvel jeleníthető meg.
console.log("Szöveg a konzolra");
A párbeszédablak sem az alapértelmezett megjelenési felület. A párbeszéd ablak viszont ehhez a felülethez tartozik, tulajdonképpen egy felugró ablak.
alert("Szöveg párbeszédablakban");
A JavaScript segítségével írhatunk az adott weboldalra, amely azonban törli a többi tartalmat.
document.write("Szöveg weblapra");
A weboldalra persze több módon is írhatunk. Írhatunk adott elemek közzé, csak valahogy azonosítani kell azt az elemet, amelynek tartalmát szeretnénk megváltoztatni.
Egy HTML elem tartalmának írása azonosító alapján:
document.getElementById("azonosito").innerHTML = "Szöveg HTML elembe";
Az első elem, amelynek osztályjelölője 'egy':
document.getElementsByClassName('egy')[0].innerHTML='Az első egy osztály';
Az első p elem tartalmának írása:
document.getElementsByTagName("p")[0].innerHTML="Az első p elem tartalma";
Jó kérdés, hogy a konzolt hol látjuk? Chrome böngészőben, Shift+Ctrl+i vagy csak F12. Firefox böngészőben Shift+Ctrl+k, de ha telepítve van a Firebug plugin akkor ott is használható az F12.
Ha egy karaktersorozatot küldök a böngészőbe, akkor azt mindig idézőjelek közzé írom, amelyek megjelennek a weboldalon, vagy egy párbeszédablakban vagy a konzolon. Egyes karaktereknek lehet speciális jelentése is. A speciális jelentést a (\) karakter jelzi. Ha például az (n) betűnek szeretnék speciális jelentést adni, akkor elé írok egy vissza-perjelet:
\n
Az n betű helyett egy sortörés íródik a HTML oldal forrásába.
\n | sortörés |
\t | tabulátor |
\' | aposztróf |
\" | idézőjel |
\\ | vissza-perjel |
\b | Backspace |
\xXX | Latin-1 karakter hexadecimális értékkel megadva. |
\uXXXX | Unicode karakter hexadecimális értékkel megadva. |
A változók elnevezett memóriaterületek, ahol különböző típusú értékeket tárolhatunk.
JavaScriptben a következő típusok vannak:
A típusokat a változók használata előtt nem kell megadni.
A változónevek kezdődhetnek betűvel (a-z vagy A-Z) vagy '_' (alulvonás) karakterrel. Ez után számok, betűk , alulvonás és '$' karakter is előfordulhatnak a változónévben. Nem latin betűk is előfordulhatnak, de használatuk nem ajánlott.
Változó létrehozás:
let változónév = érték;
vagy:
var változónév = érték;
A let kulcsszó helyett használhatjuk a var-t, de el is hagyható, nem használunk modern módot.
let szam; //deklaráció szam = 35; //definíció
vagy:
var szam; //deklaráció szam = 35; //definíció
A deklaráció és a definíció lehet egyetlen sorban is:
let szam = 35; //deklaráció és definíció
A definiált érték többször megváltoztatható:
let szam = 35; szam = szam + 2; console.log(szam);
Ma már lehet let kulcsszóval is:
let szam = 35; szam = szam + 2; console.log(szam);
"alma" 'körte' `szilva`
Mind a három helyes
Ha számokat karaktersorozatként tárolunk, műveleteket akkor is végezhetünk velük.
let gyumolcs1 = "alma"; let gyumolcs2 = 'körte'; let gyumolcs3 = `szilva`;
Több változót is létrehozhatunk egyetlen sorban, vesszővel tagolva, használatuk azonban rontja az átláthatóságot.
let szam1 = 30, szam2 = 35;
De lehet több sorba is írni:
let szam1=30, szam2=35, szam3=40;
Az állandókat a const kulcsszóval vezetjük be és szokás szerint nagybetűvel írjuk őket.
const MAX = 500;
const USER_ID = 10;
const EGYIK_ALLANDO = 0, MASIK_ALLANDO=1;
Miért foglaltak? Mert nem használhatjuk őket azonosítóként, mivel a JavaScript már használja ezeket.
abstract boolean break byte case catch char class const continue debugger default delete do double else enum export extends false final finally float for function goto if implements import in instanceof int interface long native new null package private protected public return short static super switch synchronized this throw throws transient true try typeof var volatile void while with
Kétféle operator van:
Operátor | Leírás | Példa |
---|---|---|
+ | Összeadás | a + b |
- | Kivonás | a - b |
* | Szorzás | a * b |
/ | Osztás | a / b |
% | Maradékképzés | a % b |
** | Hatványozás | a**b |
- | negatív érték | -a |
+ | megpróbálja számmá alakítani az értéket | +a |
++ | Emelés | a++ vagy ++a |
-- | Csökkentés | a-- vagy --a |
Operátor | Példa | Egyezik ezzel |
---|---|---|
= | x = y | |
+= | x += y | x = x + y |
-= | x -= y | x = x - y |
*= | x *= y | x = x * y |
/= | x /= y | x = x / y |
%= | x /= y | x = x % y |
let osszeg = 3 + 2;
Vagy
let a = 3; let b = 2; let osszeg = a + b;
Az eredmény: 5
De nézzük, azt az esetet amikor bekérjük a számokat.
let a = window.prompt("Szám1: "); let b = window.prompt("Szám2: "); let osszeg = (a + b); alert(osszeg);
Ha bemenőparaméternek megadunk 3 és 2-őt, a fenti esetben az „osszeg” változó értéke 32 és nem 5, mivel karaktersorozatként értelmezi a JavaScript. Ezért konvertálnunk kell számmá. Erre a parseInt és parseFloat függvények használhatók:
let a = window.prompt("Szám1: "); let b = window.prompt("Szám2: "); let osszeg = (parseInt(a) + parseInt(b)); alert(osszeg);
let egy = 1; let zero = 0; console.info(egy || zero); console.info(egy && zero);
Az első info() 1-gyel tér vissza, a második 0-val.
console.info(egy && ot);
Visszatér 5-tel.
Egy típusos nyelv esetén hibát ad a következő:
let a = 14 + "alma";
A JavaScript nyelvben a 14 karaktersorozatként hozzáadódik az alma szóhoz.
És mi történik ebben az esetben:
let a = 14 + 5 + "alma";
A JavaScript balról jobbra értékeli ki a kifejezést. Először két számmal találkozik, ezért számként összeadja azokat; megkapjuk a 19-t. A 19 már karaktersorozatként adódik az „alma” szóhoz.
Az eredmény:
19alma
A következő példában a számok a karaktersorozat után találhatók:
let a = "alma" + 14 + 5;
Mivel elsőként egy karaktersorozattal találkozik az értelmező, ezért a 14 és az 5-s értéket is karaktersorozatként értelmezi. Az eredmény:
alma145
Ha létrehozunk egy változót, később többféle típust elhelyezhetünk benne.
let a; a = 145; a = "alma";
A példánkban, létrehoztunk egy a változót, majd egy számot helyezünk el benne, a 145-t. Az utolsó sorban karaktersorozatot helyezünk el benne.
A karaktersorozat állandót két módon is megadhatom.
let gyumolcs = "alma"; let gyumolcs = 'alma'; let gyumolcs = `alma`; //Template string ES6-tól
Beágyazás:
let mondat1 = "alma a 'teremtésben'"; let mondat2 = 'alma a "teremtésben"';
A ferde aposztrófok lehetővé teszik a változó- vagy kifejezésbehelyettesítést.
Behelyettesítés:
let nev = 'Nagy János'; console.log(`Üdv ${nev} a téren`);
let szam = 35; console.log(`Összeadás: ${szam+5}`);
let szam = 38.00; //tizedesjegyek (decimals) let szam = 38; //tizedesjegyek nélkül
Nagy számok:
let szam1 = 25e4; // 250000 let szam2 = 25e-4; // 0.0025
A matematikai végtelent reprezentálja. Az érték nagyobb mint bármely szám.
Ezt kapjuk 0-val való osztás esetén is.
eredmeny = 1/0; alert(eredmeny); alert(Infinity);
Számítási hibák eredményeként kapjuk.
Például, szöveggel osztás:
alert("valami" / 8);
Tagolás:
let nagy_szam = 1_000_000_000; alert(nagy_szam);
let nagy_szam = 1e9; console.log(nagy_szam);
A legnagyobb egész szám: azaz 9007199254740991.
Ennél nagyobb számok esetén írjunk egy „n” betűt a szám végére. Ezt nevezzük BigInt típusnak.
let nagy_szam = 12345678901234567890123456789012345678901234567890n; console.log(nagy_szam); console.log(nagy_szam * 2n);
A 2 után is kötelező az (n) betű, mivel nem keverhető a BigInt más típussal.
let a = 5; let b = 5; let c = 8; (a == b) // az eredmény true (a == c) // az eredmény false (a > b) (a >= b) (a < b) (a <= b) (a != b)
let nagy = true;
let gyumolcsok = ['alma', 'körte', 'barack'];
let dolgozo = { nev:'Nagy János', telepules:'Szolnok', fizetes:8_500_000 };
Nézzük meg mit ad vissza a typeof operátor az egyes esetekben.
typeof ""; //string typeof "alma" //string
typeof 0 //szám -- number typeof 95 //szám -- number typeof 9.5 //szám -- number typeof (3) //szám -- number typeof (5 + 6) //szám -- number
let szam; //értéke undefined
Bármely változó értéke kiüríthető az undefined értékkel:
szam = undefined;
Az üres érték egy karaktersorozat karakter nélkül, de nincs köze az undefined értékhez.
let str = "";
A JavaScriptben a null érték a következőt jelenti: semmi. Nem szerencsés, de a JavaScriptben a null típusa objektum.
let dolgozo = {nev:"Nagy János", telepules:"Szolnok", fizetes:8500000}; dolgozo = null;
A dolgozó értéke végül null, de még mindig objektum.
Ha megvizsgáljuk az typeof operátorral:
typeof undefined // undefined typeof null // object
Hasonlítsuk össze egymással:
null === undefined // false null == undefined // true
Primitív adatértékek:
Komplex adatértékek:
typeof [1,2,3,4] // visszatér: "object"-el; nincs array visszatérési típus typeof {nev:'János', fiz:340000} // visszatér: "object" typeof null // visszatér: "object" typeof function csinald(){} // visszatér: "function"
A számok fixpontos jelöléssel írása, kérhető a toFixed() függvénnyel.
Tizedesjegyek számának meghatározása, közben a legközelibb egészre kerekítés:
let a=2489.8237; console.log(a.toFixed(3)); // 2489.824 (kerekítés felfelé) console.log(a.toFixed(2)); // 2489.82 console.log(a.toFixed(7)); // 2489.8237000 (helykitöltés)
A maradékhely kitöltődik 0-val.
A pontosság beállítható a toPrecision() függvénnyel.
Számjegyek száma (egészek és törtrészek):
let a = 123.45; console.log(a.toPrecision(6)); // 123.450 (helykitöltés) console.log(a.toPrecision(4)); // 123.5 (kerekítés felfelé) console.log(a.toPrecision(2)); // 1.2e+2 (a formátum túlcsordult)
Tudományos alakban kiír:
let num = 45.56749; let n = num.toExponential(); console.log(n); //4.556749e+1 (tudományos alak)
Ezredeselválasztás:
var num = 11222333; console.log(new Intl.NumberFormat().format(num)); //Eredmény: 11 222 333
var num = 11222333; console.log(new Intl.NumberFormat('en-US').format(num)); //Eredmény: 11,222,333
var num = 123.1234567; console.log(new Intl.NumberFormat('hu-HU', { style: 'currency', currency: 'HUF' }).format(num)); //Eredmény: 123,12 Ft
var num = 123.1234567; console.log(new Intl.NumberFormat( 'hu-HU', { style: 'currency', currency: 'HUF', minimumFractionDigits: 3 }).format(num)); //Eredmény: 123,123 Ft
var num = 123.1234567; console.log(num.toLocaleString());
A JavaScriptben elérhető egy Math nevű objektum, több állandóval és függvénnyel.
document.write(Math.PI)
document.write(Math.sin(1))
A Math objektum mezői:
Tulajdonság | Leírás |
---|---|
E | Visszatér az Euler féle számállandóval (kb. 2.718) |
LN2 | Visszatér 2 természetes logaritmusával (kb. 0.693) |
LN10 | Visszatér 10 természetes logaritmusával (kb. 2.302 |
LOG2E | Visszatér E kettes alapú logaritmusával (kb. 1.442 |
LOG10E | Visszatér E tízes alapú logratimusával (kb. 0.434 |
PI | Visszatér PI érétkével (kb. 3.14) |
SQRT1_2 | Vissztér 1/2 négyzetgyökével (kb. 0.707 |
SQRT2 | Visszatér kettő négyzetgyökével (kb. 1.414) |
A Math objektum metódusai:
Metódus | Leírás |
---|---|
abs(x) | Visszatér x abszolútértékével |
acos(x) | Visszatér x arkusz koszinuszával (x-et radiánban várja) |
asin(x) | Visszatér x arkusz szinuszával (x-et radiánban várja) |
atan(x) | Visszatér x arksuz tangensével; a szám -PI/2 – és PI/2 közötti szám radiánban |
atan2(y,x) | Visszatér az argumentum hányadosának arkusz tangensével |
ceil(x) | Visszatér x felkerekített értékével |
cos(x) | Visszatér x koszinuszával (x-et radiánban várja) |
exp(x) | Vissztér x exponenciális alakjával |
floor(x) | Visszatér x lefelekerekített egész alakjával |
log(x) | Visszatér x E alapú természetese logaritmussal |
max(a,b,c,…,n) | Visszatér a legnagyobb értékkel |
min(a,b,c,…,n) | Visszatér a legkisebb értékkel |
pow(x,y) | Visszatér x y hatványával |
random() | Visszatér egy 0 és 1 közötti számmal |
round(x) | Visszatér x legközelebbi egészre kerekített értékével |
sin(x) | Visszatér x szinuszával (x-et radiánban várja) |
sqrt(x) | Visszatér x négyzetgyökével |
tan(x) | Visszatér x szög tangensével |
1 és 5 közötti véletlen szám:
let szam = Math.floor((Math.random() * 5)+1); alert(szam);
Tízes alapú logaritmus:
function log10(val) { return Math.log(val) / Math.LN10; }
Ügyeljünk arra, hogy amikor valaki azt mondja logaritmus, általában a tízes alapú logaritmusra gondol.
A Math.random() függvény 0 és 1 között ad egy véletlen számot.
1-3 közötti véletlen szám:
let vel = parseInt(Math.random()*3)+1;
document.write(parseFloat('1.45kg')); //Eredmény: 1.45 document.write(parseFloat('0.1e6')); //Eredmény: 100000 document.write(parseFloat('123.45')); //Eredmény: 123.45 document.write(parseFloat('0123.45')); //Eredmény: 123.45 document.write(parseFloat('0x123.45')); //Eredmény: 0 document.write(parseFloat('.45')); //Eredmény: 0.45 document.write(parseInt('1.45kg')); //Eredmény: 1 document.write(parseInt('123.45')); //Eredmény: 123 document.write(parseInt('123')); //Eredmény: 123 document.write(parseInt('0123', 10)); //Eredmény: 123 document.write(parseInt('123.45')); //Eredmény: 123 document.write(parseInt('12', 8)); //Eredmény: 10 (= 2 + 1*8) document.write(parseInt('012')); //Eredmény: 10 (= 2 + 1*8) document.write(parseInt('0xff')); //Eredmény: 255 (= 15 + 15*16) document.write(parseInt('ff', 16));//Eredmény: 255 (= 15 + 15*16) document.write(parseInt('ff', 10)); //Eredmény: NaN document.write(parseInt('0.1e6')); //Eredmény: 0 document.write(parseInt('ZZ', 36)); //Eredmény: 1295 (= 35 + 35*36)
let szam = 4; console.log(typeof szam); let szamStr = String(szam); console.log(typeof szamStr);
let szamStr = '35'; console.log(typeof szamStr); let szam = Number(szamStr); console.log(typeof szam);
let szamStr = '1'; console.log(typeof szamStr); let logikai = Boolean(szamStr); console.log(typeof logikai); console.log(logikai);
var a = 3.5; var logikai = Boolean(a);
Számértékek | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
-1.7 | -0 | +0 | 1 | 1.6 | 8 | 16 | 16.8 | 123e-2 | Infinity | +Infinity | NaN |
true | false | false | true | true | true | true | true | true | true | true | false |
Karaktersorozat | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
„” üres string | „-1.6” | „0” | „1” | „1.6” | „8” | „16” | „16.8” | „123e-2” | „010” Oktális | „0x10” (Hex) | „0xFF” (Hex) | „-010” | „-0x10” | „xx” | |
false | true | true | true | true | true | true | true | true | true | true | true | true | true | true |
Más érték | |||||
---|---|---|---|---|---|
undefined | null | true | false | new Object() | function(){ return; } |
false | false | true | false | true | true |
A nem számot számmá konvertálja.
let szamStr = '35'; let szam = +szamStr; console.log(typeof szam);
Az eredmény number.
let almak = '3'; let narancsok = '5'; console.log(+almak + +narancsok);
Eredmény: 8
Az eval() nemcsak átkonvertálja a számokat, de kiértékeli a kifejezéseket is.
console.log(eval('30+35'));
console.log(eval('30+35') === eval('65') );
Eredménye: true
console.log(eval('30+35') === eval(new String('65')));
Eredménye: false
Egy név bekérése:
let nev = prompt('Neved: ');
Megadható alapértelmezett érték is:
let nev = prompt('Neved: ', 'Névtelen');
<div id="megerosites"></div> <button onclick="megerosit()">Megerősítés</button> <script> function megerosit() { var res = confirm('Megerősíted?'); if(res == true) document.getElementById("megerosites").innerHTML = "Megerősítve"; else document.getElementById("megerosites").innerHTML = "Elvetve"; } </script>
if (feltétel) { //törzs }
let szam = 35; if (szam > 9) { console.log('többjegyű'); }
if (feltétel) { //törzs } else { //törzs }
let szam = 35; if (szam > 9) { console.log('többjegyű'); }else { csonsole.log('negatív vagy egyjegyű'); }
if (feltétel1) { //utasítások } else if (feltétel2) { //utasítások } else { //utasítások }
let szam = 35; if (szam > 0) { console.log('pozitív'); }else if(szam<0) { console.log('negatív'); }else { console.log('nulla'); }
Ha a szelekció törzsében csak 1 utasítás van a kapcsos zárójelek elhagyhatók. Szelekció {} nélkül:
let a = 35 let b = 20 if(a>b) document.write("Az a nagyobb") else document.write("A b nagyobb")
if(1) console.info("Ez a szöveg megjelenik");
let a = ""; if(!a) console.info("Ez a szöveg is megjelenik");
let a = "szilva"; if(a) console.info("Ez a szöveg is megjelenik");
A switch-case szerkezet, több ágú szelekció létrehozására használható.
A switch zárójelében egy változót adunk meg, amit a case után vizsgálunk.
switch(n) { case 1 : utasítás1; break; case 2 : utasítás2; break; case 3 : utasítás3; break; default: alapértelmezett_utasítás; }
Ha n értéke 1, akkor utasítás1 hajtódik létre. A break utasítás megszakítja további utasítások végrehajtása.
Ha n értéke 2, akkor utasítás2 hajtódik létre. A break utasítás megszakítja további utasítások végrehajtása.
Példa:
let szam = parseInt(prompt('Írj be egy számot 0 és 3 között')) switch(szam) { case 0: alert('nulla'); break; case 1: alert('egy'); break; case 2: alert('kettő'); break; case 3: alert('három') break; default: alert('Nem 0 és 3 közötti szám'); }
A for ciklus főleg akkor használjuk ha tudjuk hányszor kell forduljon a ciklus.
A ciklusban egy ciklusváltozót használunk, amelyben tároljuk, hányadik ciklusnál járunk.
A ciklus fejrésze három részből áll. Az első a ciklusváltozó kezdőértéke, utána egy feltétel. A feltétel ha igaz a ciklus tovább fut. A harmadik paraméter, ahol növeljük a ciklusváltozó értékét.
for (kezdőérték; feltétel; növekmény) { //ciklustörzs }
for(i=0; i<10;i++) { document.write("Ez az<br>"); }
while (állítás) { //ciklus törzse }
let i = 0; while (i < 5) { console.log('valami'); i++; }
do { //ciklustörzs } while (állítás);
let i = 0; do { console.log(i); i++; } while (i < 5);
<div id="e"></div> <script> let t = [3, 5, 6, 4, 8]; let e = document.getElementById("e"); for(i in t){ e.innerHTML = e.innerHTML + " " + t[i]; } </script>
A String objektumban egy szövegdarabot tudunk tárolni és manipulálni.
String objektumot a new String() segítségével készíthetek.
Szintaxis:
let txt = new String("szöveg");
Vagy egyszerűen csak így:
let txt = "szöveg";
String objektumok tulajdonságai:
Tulajdonság | Leírás |
---|---|
constructor | Hivatkozás egy konstruktorra. |
length | Egy string hosszát tartalmazza. |
prototype | Lehetővé teszi tulajdonság vagy metódus hozzáadását egy objektumhoz. |
String objektumok metódusai
Metódus | Leírás |
---|---|
charAt() | Egy karakter az adott pozícióról |
charCodeAt() | A karakter unicode-ja adott pozícióról |
concat() | Kettő vagy több string összefűzése |
indexOf() | Az adott paraméter első előfordulását adja vissza |
lastIndexOf() | Az adott paraméter utolsó előfordulását adja vissza |
match() | Szöveg illeszkedésének vizsgálata |
replace() | Szöveg helyettesítése. Amit helyettesítünk regexel adjuk meg |
search() | A szabályos kifejezés által jelölt szöveg első előfordulását adja vissza. |
slice() | Veszi egy karaktersorozat részét, majd visszatér egy karaktersorozattal. |
split() | Stringet alrészekre bont, és tömbben helyezi el. |
substr() | Elavult. Visszaadja egy karaktersorozat részét, adott pozíciótól, adott számú karaktert. |
substring() | Visszaadja egy karaktersorozat részét, adott két pozíció között. |
toLowerCase() | Minden betűt kisbetűssé alakít |
toUpperCase() | Minden betűt nagybetűssé alakít |
valueOf() | A String objektum primitív értékével tér vissza |
Mi a különbség a slice(), substring és a substr() között?
String.slice( kezdet [, vég ] ) String.substring( innen [, eddig ] ) String.substr( kezdet [, hossz ] )
String HTML burkoló metódusok
A HTML burkoló metódusok visszatérnek a HTML elemmel
Metódus | Leírás |
---|---|
anchor() | Egy horgony létrehozása |
big() | A szöveget big típusú fontként jeleníti meg |
blink() | Vilogtatja a stringet |
bold() | Félkövér szöveg |
fixed() | Fix méretű fontok megjelenítése |
fontcolor() | A megadott színnel jeleníti meg a szöveget |
fontsize() | A font mérete |
italics() | Dőlt típus |
link() | Hiperlinket csinál a szövegből |
small() | A szöveg small típusú |
strike() | Áthúzott szöveg |
sub() | Alsóindexben a szöveg |
sup() | Felsőindexben a szöveg |
let a = document.getElementById("egy"); a.innerHTML = "tinta".bold();
Egy új metódust adunk a String objektumhoz:
String.prototype.replaceAt=function(index, char) { return this.substring(0, index) + char + this.substring(index+1); }
A replaceAt() metódus adott helyen kicseréli egy karaktert.
Másik változat:
String.prototype.replaceAt=function(index, swap) { return this.substr(0, index) + swap + this.substr(index + swap.length); }
Harmadik megvalósítás:
String.prototype.replaceAt=function(index, char) { str = this.split(''); str[index]=char; str = str.join(''); return str; }
let szo = 'alma'; let karakter = szo.charAt(0); console.log(karakter);
let janos = 'Nagy János:Szolnok:8445000'; let szavak = janos.split(':'); console.log(szavak[0]);
let szo = 'bekezdes'; let ujszo = szo.anchor('bekezdes1'); console.log(ujszo);
Visszatér a következővel:
<a name="bekezdes1">bekezdes</a>
let szo = 'alma'; let ujszo = szo.bold(); console.log(ujszo);
Félkövér:
<b>alma</b>
let szo = 'SzitWiki'; let ujszo = szo.link('https://szit.hu'); console.log(ujszo);
A következő szöveggel tér vissza:
<a href="https://szit.hu">SzitWiki</a>
Tartalmazás az includes() függvénnyel:
Böngésző támogatottság | |||||
---|---|---|---|---|---|
Böngésző | Chrome | Firefox | Safari | Opera | Edge |
Verzió: | 41 | 40 | 9 | 28 | 12.0 |
Az am szót tartalmazza az adott karaktersorozat?
let s = "valami"; alert(s.includes("am"));
A 4 indextől kezdve az „am” szöveget tartalmazz az adott karaktersorozat:
let s = "valami"; alert(s.includes("am", 4));
ECMAScript 6 | |
---|---|
Metódus | Leírás |
endsWith() | Adott szöveg megtalálható-e egy szöveg végén. |
startsWith() | Adott szöveg megtalálható-e egy szöveg elején. |
ECMAScript 6
A hossz megmondja, milyen hosszú szövegben kell keresni.
const szoveg = 'Valami ami más'; console.log(szoveg.endsWith('más'))
A példa eredménye true, mivel a szoveg változót 'más' szóra végződik.
const szoveg = 'Valami ami más'; console.log(szoveg.endsWith('ami', 10))
A példa eredménye true, mivel a szoveg változót első 10 karaktere 'ami' szóra végződik.
ECMAScript 2015
const szoveg = 'Valami ami más'; console.log(szoveg.startsWith('Valami'))
A példa eredménye true, mivel a szoveg változó a 'Valami' szóval kezdődik.
A string interpoláció, más néven változó behelyettesítés. A JavaScript nyelven a backtick karakterekkel megadott stringek teszik lehetővé az interpolációt.
Lgyen például egy name nevű változó valamilyen tartalommal.
firstName="Lajos"; console.log(`Üdv: ${firstName}`);
Ha JavaScript nyelven tömbbe szeretnék tenni számokat, karakterláncokat, akkor szögletes zárójelbe teszem őket:
var szamok = [32, 47, 28]; var nevek = ['Béla', 'Mari', 'Dani'];
Üres tömb létrehozása, és feltöltés:
var szamok = []; szamok.push(32); szamok.push(47); szamok.push(28);
A tömbök általában azonos típusú adatok tárolására használatosak. A JavaScript nyelv megengedi különböző típusok tárolását is. A számokat tartalmazó tömbben elhelyezhetek egy karakterláncot is:
var szamok = []; szamok.push(32); szamok.push(47); szamok.push(28); szamok.push('Béla');
Üres tömböt létrehozhatunk az Array() példányosításával.
let tomb = new Array(); tomb[0] = 3; tomb[1] = 5; tomb[2] = 8;
A tömbök indexelése 0-val kezdődik.
Kezdőérték több módon is adható:
let tomb = new Array(3, 5, 8);
let tomb = [3, 5, 8];
let tomb = ["barack", "körte"]; tomb.push("szilva"); tomb.push("alma"); alert(tomb);
A tömbök mérete a length mezővel kérdezhetők le:
let tomb = new Array(3, 8, 5); alert(tomb.length);
Tömbelem kezelése veremként:
let gyumolcs = new Array(); tomb.push("körte"); tomb.push("szilva");
delete tomb[2];
Töröltük a második elemet. Az elemek indexe nem változik.
tomb.splice(2, 1);
A második indextől töröltünk egy elemet, az indexek, újragenerálódtak.
Az első törlése:
tomb.shift()
Az utolsó törlése:
tomb.pop()
Az első elem törlése:
var szamok = [3, 8, 2, 5, 7]; szamok.splice(0, 1) console.log(szamok); // Kimenet: [ 8, 2, 5, 7 ]
Példa a delete használatára:
var szamok = [3, 8, 2, 5, 7]; delete szamok[2] console.log(szamok); //[ 3, 8, <1 empty item>, 5, 7 ]
Az indexOf() függvény visszaadja az elem indexét. Az eredmény -1, ha nincs találat.
let szamok = [35, 29, 41, 8, 12]; console.log(szamok.indexOf(29))
let szamok = [35, 29, 41, 8, 12]; console.log(szamok.includes(29))
Második paraméterrel:
Megadható a „fromIndex” paraméter, ahol megmondjuk, melyik indextől keresünk:
let szamok = [35, 29, 41, 8, 12]; console.log(szamok.includes(29, 2))
let szamok = [35, 29, 41, 8, 12]; let van = szamok.some( szam => szam === 29 ) console.log(van)
Az eredmény, true vagy false.
Az eredmény egy tömb:
let szamok = [35, 29, 41, 8, 12]; let tomb = szamok.filter(szam => szam === 29); console.log(tomb[0]);
Az eredmény az elem vagy undefined:
let szamok = [35, 29, 41, 8, 12]; let ertek = szamok.find(szam => szam === 29); console.log(ertek);
Saját függvény írása:
Array.prototype.contains = function(ker) { return this.indexOf(ker) > -1; } let szamok = [35, 29, 41, 8, 12]; console.log(szamok.contains(29))
Az index kinyerés, majd index alapján a tömb eleme:
for (index in tomb) { console.log(tomb[index]); }
Tömb elemét kapjuk:
for (elem of tomb) { console.log(elem); }
lista.forEach((element) => { console.log(element); });
lista.forEach((element, index) => { console.log(element, index); });
let lista = ['aaa', 'bbb', 'cccc']; lista.forEach(csinal); function csinal(content, index) { console.log(content, index); }
const janos = { name: "Nagy János", city: "Szolnok", salary: 2850000 }; console.log(janos.name); console.log(janos.city);
const jarmu = { rendszam: "ABC-123", marka: "Opel", ar: 2400000, eladva: false }; console.log(jarmu.rendszam); console.log(jarmu.ar);
const erzsi = { name: "Tangó Erzsébet", kor: 37 }; const jozsi = { name: "Endrei József", kor: 42 }; var dolgozok = []; dolgozok.push(erzsi); dolgozok.push(jozsi); for(let dolgozo of dolgozok) { console.log(dolgozo.name); console.log(dolgozo.kor); }
function kiir() { alert("A függvény"); } kiir()
A függvény nem csinál semmit, csak egy mellékhatása van, minthogy feldob egy ablakot, amiben megjelenik a „A függvény” szöveg.
A függvény meghívható annak deklarálása előtt is:
kiir() function kiir() { alert("A függvény"); }
A függvényektől kaphatunk egy értéket a hívás helyén, ha a függvény törzsében szerepel egy „return” utasítás. A következő példában egy karakterlánccal térünk vissza.
function getName() { return "A te neved" } document.write(getName())
Visszatérés számal:
function getNum() { return 45 } alert(getNum())
A függvényeknek a hívás helyén átadhatunk értékeket, a függvény törzsében ezeket átvehetjük változókban.
A következő példában a függvény számára átadunk egy 3 és egy 5 értéket.
function osszead(szam1, szam2) { return szam1 + szam2 } document.write(osszead(3,5))
A függvény törzsében a 3-t a szam1 változóban kapjuk, az 5-t a szam2 változóban. A return utasítástól jobbra egy kifejezés található: szam1 + szam2. Az utasítás hatására a kifejezés kiértékelődik, a return a számított értékkel tér vissza.
A függvény nevét külön zárójelbe tesszük.
function kiir() { console.log("Működik") } (kiir)()
A hívás nem sokban különbözik a normál kiir() hívástól.
De ha ezt megtehetjük, akkor a zárójelbe akár az egész függvényt is behelyettesíthetjük.
(function kiir() { console.log("Működik") })();
Az eredmény ugyanaz, csak a függvény definiálása helyén meg is hívtuk.
Ebben az esetben viszont felesleges a függvény neve.
(function() { console.log("Működik") })();
A zárójelben belül, kaptunk egy névtelen függvényt.
var kiir = () => { console.log("működik"); } kiir();
Névtelen függvény, azonnal meghívva.
(() => { console.log("működik"); })();
Függvényeket létrehozhatunk névtelenül is:
// ez így nem működik function(){ console.log("működik"); }
Ezt magában viszont nem szokták használni. Vagy beépítjük egy másik függvény paraméterébe, vagy meghívjuk így:
(function() { console.log("működik"); })();
Ha van paramétere:
(function(uzenet){ console.log(uzenet); })("Működik");
Függvény paraméterként:
function kiir(nev, uzenet) { console.log(uzenet + " " + (nev)()); } kiir(function() { let nev = "Nagy Béla"; return nev; }, "Üdv");
A fenti példában a kiir függvény első paraméterként egy függvényt vár.
Esetleg átadhatjuk egy mutatónak:
let f = function() { console.log("Működik"); } f();
A nyílfüggvényekben a this kulcsszó nincs kötve.
A function kulcsszóval létrehozott függvényekben a this arra az elemre mutat, amin hívjuk a függvényt.
<input id="egy">
const egyElem = document.querySelector('#egy'); egyElem.addEventListener('click', function(){ console.log(this.value); });
Lambda használata esetén nem működik a this kulcsszó.
Nem használható a szam:
{ let szam = 35; } console.log(szam);
Használható a szam:
{ var szam = 35; } console.log(szam);
A let nem deklarál globális változót.
var vmi = 'vmi'; let mas = 'más'; console.log(window.vmi); //vmi console.log(window.mas); //undefined
Újradeklarálható:
var vmi = 'vmi'; var vmi = 'mas';
Az újradeklarálás hibát eredményez.
let mas = 'vmi'; let mas = 'más';
A konzolra ír naplóbejegyzést.
document.write("Működik");
Végrehajtás egyszer. Öt másodperc múlva:
setTimeout(function() { console.log("Működik"); }, 5000);
Végrehajtás periodikusan. Öt másodpercenként:
setInterval(function() { console.log("Működik"); }, 5000);
Általánosan így írhatjuk le a szintaxist:
setInterval(callback, kesleltetes_millisecben)
Lehetőség van a HTML oldalba egy noscript nevű elemet ágyazni, amelynek tartalma, akkor jelenik meg, ha nem támogatja a böngésző a JavaScripteket, vagy ki van kapcsolva.
A böngészők megengedik számunka az elavult régi programkódok írását. A modern módot bekapcsolhatjuk a következő módon:
'use strict';
Ha szeretnénk, hogy a böngésző fejlesztőeszköze hibát jelezzen, ha nem modern módban programozunk, tegyük a fenti karaktersorozatot a Javascript kódunk elejére. Mindig az első utasítás legyen.
Ha böngésző konzolon szeretnénk ezt érvényesíteni, akkor használjunk Shift+Enter billentyűkombinációt az egyszerű Enter helyett.
'use strict';<Shift+Enter>
Ha függvényünk elejére írjuk, akkor csak a függvényen belül lesz érvényes.
Ha szeretnénk az állományunk egy részében érvényesíteni, akkor tegyük burokba:
(function() { 'use strict'; // sajátkód })()
A use strict jelölésnek mindig az első utasításnak kell lennie. Az alábbi utasítások hiba nélkül futnak:
console.log('valami') 'use strict'; let a = 35; console.log(a);
Az első JavaScript kódban nem volt kötelező deklarálni a változót használat előtt. Érvényes a következő kód:
a = 35; console.log(a);
Most futtassuk a 'use strict' jelölővel:
'use strict'; a = 35; console.log(a);
Hogyan lehetne javítani?
'use strict'; var a = 35; console.log(a);
2015-ben bevezették a JavaScript modulokat. A modul alapértelmezetten strict módban fut.
function valami() { // ez a modul alapértelmezetten strict módban fut } export default valami;