Hogyan lehetne kijavítani a hibákat? //JS
Ezt a hiba üzenetet kapom:
app.js:33 Uncaught TypeError: Cannot read properties of undefined (reading 'length')
at Object.tetelHozzaad (app.js:33:31)
at HTMLButtonElement.vezTetelHozzadas (app.js:110:39)
tetelHozzaad @ app.js:33
vezTetelHozzadas @ app.js:110
El kell olvasni a hibaüzenetet:
az app.js fileod 33. sorában kiolvasod a tetelHozzaad length-jét, ami futásidőben, akkor, ott valamiért undefined típusú. Tehát logikai hibát vétettél.
A legfontosabb, hogy megtanuld értelmezni a hibaüzeneteket (ezek mindig, szép rendszerben jönnek mint egy térkép), tanulj meg debuggolni, és tanuld meg használni a googlet. Ha ez megy, akkor minden kérdésedre választ fogsz találni.
bocs, a tetelek lengtjét akarod kiolvasni, közben látom.
1. mindenhol var-t használsz, ezt sürgősen felejtsd el. Javascript esetében mindig block-scoped statementet használj a változók deklarálásához, vagy ha már nem fogod megváltoztatni az értékét (const WEIGHT_OF_STUFF = 300) akkor a const statementet.
2. a változóid és a függvényeid elnevezése minden esetben angol nyelven történjenek. Az informatika anyanyelve az angol. A kommentjeid lehetnek a saját nyelveden, ha azt megengedi a stack.
3. használd ki az ecmascript (modern javascript) adta lehetőségeket:
ennél:
var Kiadas = function (id, leiras, ertek) {
this.id = id;
this.leiras = leiras;
this.ertek = ertek;
}
ez elegánsabb:
class Expense {
constructor(id, desc, value) {
this.id = id;
this.desc = desc;
this.value = value;
}
}
let fooExpense = new Expense(1, 'asdasd', 9823)
A javascript prototypal inheritance öröklési formát használ, viszont elég régóta támogatott a rendes class alapú felírás is. Under the hood ugyan arra fog lefordulni a kód, de ez minden esetben elegánsabb. Még elegánsabb, ha typescriptet (modern javascript on steroids) használsz, és csak akkor példányosítasz osztályokat, ha valóban szükséged van rá, és helyette interfaceket csinálsz (typescript magic).
4. a változóneveid / függvényneveid minden esetben legyenek beszédesek. Az "adat", nem beszédes. A "tetelHozzaad" azt feltételezi, hogy a tétel modell egyik műveletét hajtja végre, tehát egy tétel objektumot-t hozzáad egy tétel típusú tömbhöz. Legyen egy tétel osztályod, melynek egyik methodja legyen az "addExpense", vagy "createNewExpense" method.
5. az IIFE-k aranyosak, működnek, de semmi szükséged nincs a használatukra, mert átláthatatlanok. Ha nagyon kell, akkor használd, de kicsit code smell érzést ad.
Látszik, hogy van melód benne, érdekel a téma, és elindultál az úton. Ezeket nem kötözködésből írom, hanem jó szívvel, hogy tudj fejlődni.
Ajánlom figyelmedbe az MDN oldalát, ahol majdhogynem minden JS-el kapcsolatos technikai kérdésedre megkapod a választ. Ha nem, akkor mehet a stackoverflow.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!