Kezdőoldal » Számítástechnika » Programozás » Hogyan lehetne kijavítani a...

Hogyan lehetne kijavítani a hibákat? //JS

Figyelt kérdés

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


[link]



2022. jan. 16. 19:56
 1/4 anonim ***** válasza:

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.

2022. jan. 16. 20:11
Hasznos számodra ez a válasz?
 2/4 A kérdező kommentje:
Köszönöm a válaszod. 2 hete kezdtem el tanulni a JS-t napi szinten több órát tanulom, egyedül persze nem egyszerű, viszont eléggé nehéz így.
2022. jan. 16. 20:14
 3/4 anonim ***** válasza:
100%

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.


[link]

2022. jan. 16. 20:34
Hasznos számodra ez a válasz?
 4/4 A kérdező kommentje:
Köszönöm a választ. Nem sokat értek belőle amit írtál, de idővel biztosan megértem majd.
2022. jan. 17. 11:41

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!