პროგრამირების საფუძვლები › დამწყები › შეცდომების პოვნა
შეცდომის შეტყობინების წაკითხვა
ეს თავი CodeQuest Pro-ს ნაწილია
Pro ხსნის სკოლის ყველა კურსს და თამაშის ყველა ლეველს, ვიდეოს და პროექტს. ერთჯერადი გადახდა, გამოწერის გარეშე.
რას ისწავლი
- რისგან შედგება შეცდომის შეტყობინება
- რას ნიშნავს ყველაზე ხშირი შეტყობინებები და რა იწვევს მათ
- ნაბიჯების რიგი, რომლითაც შეცდომას სწრაფად იპოვი
შეტყობინების ანატომია
ყოველ შეცდომის შეტყობინებას ორი ნაწილი აქვს, ორწერტილით გამოყოფილი:
// TypeError: Cannot read properties of undefined (reading 'name')
// ↑ სახე ↑ რა მოხდა- სახე (type):
SyntaxError,ReferenceErrorანTypeError. ის მაშინვე გეუბნება, რა ტიპის პრობლემაა. - აღწერა (message): რა ვერ გააკეთა კომპიუტერმა. აქ ხშირად წერია ცვლადის ან თვისების სახელი, რომელიც პრობლემას იწვევს.
ბრაუზერის კონსოლში შეტყობინებას ხაზის ნომერიც ახლავს, მაგალითად script.js:12: იქიდან დაიწყე ძებნა. ამ გვერდის რედაქტორი მხოლოდ სახესა და აღწერას აჩვენებს, ამიტომ აქ შეცდომას აღწერაში ნახსენები სახელით იპოვი.
შეტყობინებები ინგლისურადაა. ქვემოთ მოცემულია ყველაზე ხშირების თარგმანი და მიზეზები, როგორც მათ Chrome და Edge ბრაუზერები წერს.
ReferenceError: … is not defined
„… არ არის განსაზღვრული“. კომპიუტერმა იპოვა სახელი, რომელიც არ იცის.
- სახელში შეცდომა:
totlნაცვლადtotal-ისა,Scoreნაცვლადscore-ისა. - ცვლადი სხვა ხილვადობის არეშია: ის ფუნქციის ან ბლოკის შიგნით შეიქმნა.
- ბრჭყალების გარეშე ტექსტი:
console.log(გამარჯობა)-ში კომპიუტერი ცვლადს ეძებს სახელად „გამარჯობა“.
TypeError: Cannot read properties of undefined
„undefined-ის თვისებების წაკითხვა შეუძლებელია“. ეს ალბათ ყველაზე ხშირი შეცდომაა მთელ JavaScript-ში. ის ნიშნავს: წერტილის წინ მდგომი რაღაც undefined-ია.
let users = [{ name: "ანა" }];
console.log(users[1].name);users[1] არ არსებობს, ის undefined-ია, და undefined.name წაკითხვა შეუძლებელია. ასეთ დროს ჰკითხე: რა წერია წერტილის წინ და რატომ არის ის undefined? ხშირი მიზეზებია არასწორი ინდექსი, სახელში შეცდომა თვისებაში ან ფუნქცია, რომელმაც return დაივიწყა.
TypeError: … is not a function
„… ფუნქცია არ არის“. ფრჩხილებით გამოიძახე რაღაც, რაც ფუნქცია არ არის: n(), სადაც n რიცხვია, ან მეთოდი, რომელიც ამ ტიპს არ აქვს. მაგალითად, let n = 5; n.toUpperCase(); იძლევა n.toUpperCase is not a function: რიცხვს დიდ ასოებად ვერ გადააქცევ. შეამოწმე მეთოდის სახელი და მნიშვნელობის ტიპი.
TypeError: Assignment to constant variable
„მუდმივისთვის მინიჭება“. const-ით შექმნილ ცვლადს ახალი მნიშვნელობა მიანიჭე. თუ ცვლადი უნდა იცვლებოდეს, let-ით შექმენი.
SyntaxError
გრამატიკის შეცდომები. ყველაზე ხშირი:
missing ) after argument list: ფუნქციის გამოძახებას დამხურავი ფრჩხილი აკლია.Invalid or unexpected token: ხშირად დაუხურავი ბრჭყალი ან ზედმეტი სიმბოლო, მაგალითად ქართული განლაგების „ბრჭყალი“ კოდში.Unexpected end of input: კოდი მოულოდნელად დასრულდა, ჩვეულებრივ დაუხურავი}-ის გამო.
ნაბიჯები
- წაიკითხე სახე: სინტაქსი, სახელი თუ ტიპი?
- იპოვე აღწერაში ნახსენები სახელი და მოძებნე კოდში.
- შეამოწმე ეს ხაზი და მის წინ მდგომი ხაზიც: დაუხურავი ფრჩხილი ხშირად შემდეგ ხაზზე „ფეთქდება“.
- გაასწორე ერთი რამ და ისევ გაუშვი.
სცადე თავად
გაუშვი. რომელი შეცდომა გამოჩნდა? გაასწორე ციკლის პირობა ისე, რომ სამივე სახელი დაიბეჭდოს და შეცდომა გაქრეს.
ხშირი შეცდომები
- მხოლოდ სახის წაკითხვა. „TypeError“ ბევრ რამეს შეიძლება ნიშნავდეს. მთავარი ინფორმაცია აღწერაშია.
- შეცდომის ძებნა მხოლოდ მითითებულ ხაზზე. სინტაქსური შეცდომის მიზეზი ხშირად ერთი-ორი ხაზით ზემოთაა.
- ბევრი ცვლილება ერთად. გაასწორე ერთი რამ, გაუშვი და ნახე, რა შეიცვალა.
სავარჯიშო
ამ პროგრამამ ფასების ჯამი უნდა დაბეჭდოს, ჯამი: 18, მაგრამ შეცდომას იძლევა. წაიკითხე შეტყობინება, იპოვე და გაასწორე.
💡 მინიშნება
შეტყობინება ReferenceError: totl is not defined გეუბნება სახელს, რომელიც არ არსებობს. შეადარე ის ზემოთ შექმნილ ცვლადს.
✅ ამოხსნის ნახვა
let prices = [5, 8, 5];
let total = 0;
for (const price of prices) {
total += price;
}
console.log("ჯამი:", total);მინი-ქვიზი
1რას ნიშნავს ReferenceError: score is not defined?
ხშირად სახელში შეცდომაა, ან ცვლადი სხვა ბლოკშია შექმნილი.
2Cannot read properties of undefined (reading 'price'). რა არის undefined?
undefined-ის თვისების წაკითხვა შეუძლებელია. შეამოწმე, რატომ არის წერტილის წინ მდგომი მნიშვნელობა undefined.
3რა იწვევს ხშირად Unexpected end of input-ს?
კომპიუტერი ელოდა }-ს, კოდი კი დასრულდა.
შეჯამება
- შეტყობინება = სახე + აღწერა. ბრაუზერის კონსოლი ხაზის ნომერსაც აჩვენებს.
ReferenceError: სახელი არ არსებობს.TypeError: მნიშვნელობით შეუძლებელს აკეთებ.SyntaxError: გრამატიკა.Cannot read properties of undefined: შეამოწმე, რა წერია წერტილის წინ.- შეამოწმე მითითებული ხაზიც და მის წინ მდგომიც. ერთი ცვლილება, ერთი გაშვება.