اووه، ما دا بیا وکړل: په جاواسکریپټ کې د عام غلطیو ډیبګ کول

اووه، ما دا بیا وکړل: په جاواسکریپټ کې د عام غلطیو ډیبګ کول

د جاواسکریپټ کوډ لیکل کیدی شي ننګونې وي او ځینې وختونه مستقیم ډارونکي وي، ځکه چې ډیری پراختیا کونکي ورسره اشنا دي. د کار په بهیر کې، تېروتنې په ناڅاپي ډول رامنځته کیږي، او ځینې یې په مکرر ډول تکرار کیږي. دا مقاله، چې موخه یې د نوي جوړونکي دي، د دې غلطیتونو او د حل کولو څرنګوالي په اړه خبرې کوي. د وضاحت لپاره، د دندو، ملکیتونو او شیانو نومونه اخیستل شوي دي مشهور سندره. دا ټول تاسو سره مرسته کوي په چټکۍ سره په یاد ولرئ چې څنګه عام غلطی سم کړئ.

موږ یادونه کوو: د ټولو هابر لوستونکو لپاره - د 10 روبل تخفیف کله چې د هابر پرومو کوډ په کارولو سره د مهارت بکس کوم کورس کې نوم لیکنه وکړئ.

Skillbox وړاندیز کوي: عملي کورس "د ګرځنده پرمخ وړونکي PRO".

TypeError: ملکیت ندی تعریف شوی

let girl = {
    name: "Lucky",
    location: "Hollywood",
    profession: "star",
    thingsMissingInHerLife: true,
    lovely: true,
    cry: function() {
        return "cry, cry, cries in her lonely heart"
    }
}
console.log(girl.named.lucky)

پورته د مثال کوډ د ناڅرګند شوي ټایپ ایرر تېروتنه وهي: د نا تعریف شوي ملکیت 'خوشحاله' لوستل نشي کولی. ستونزه دا ده چې د نجلۍ اعتراض د نوم ملکیت نه لري، که څه هم دا د نوم ملکیت لري. او له هغه ځایه چې د نجلۍ نوم ملکیت ندی تعریف شوی، تاسو نشئ کولی لاسرسی ومومئ، ځکه چې په رسمي توګه شتون نلري. مګر که تاسو girl.named.lucky د girl.name سره بدل کړئ، نو هر څه به کار وکړي او برنامه به خوشحاله بیرته راشي.

تاسو کولی شئ د ملکیتونو په اړه نور معلومات زده کړئ دلته یې ولولئ.

د TypeErrors حل کولو څرنګوالی

TypeErrors هغه وخت رامینځته کیږي کله چې یو پروګرامر هڅه کوي په ډیټا کې داسې کړنې ترسره کړي چې د ځانګړي ډول سره سمون نلري. په مثالونو کې د .bold() کارول، د نا تعریف شوي ملکیت غوښتنه کول، یا د داسې فنکشن غږ کول شامل دي چې په حقیقت کې فنکشن نه وي.

نو، که تاسو د نجلۍ() ته د زنګ وهلو هڅه وکړئ، تاسو به دا تېروتنه ترلاسه کړئ Uncaught TypeError: yourVariable.bold یو فنکشن نه دی او نجلۍ فنکشن نه دی، ځکه دا په حقیقت کې یو څیز دی چې ویل کیږي، نه فنکشن.

د تېروتنو د له منځه وړلو لپاره، تاسو اړتیا لرئ چې متغیرونه مطالعه کړئ. نو، نجلۍ څه ده؟ نجلۍ څه نومیږي؟ تاسو کولی شئ د کوډ تحلیل کولو ، د console.log په کارولو سره د متغیرونو ښودلو ، د ډیبګر کمانډ ، یا په کنسول کې د متغیر نوم په زنګ وهلو سره ومومئ. تاسو اړتیا لرئ ډاډ ترلاسه کړئ چې په متغیر کې موجود ډیټا ډول باندې کار کول ممکن دي. که دا مناسب نه وي، دا بدل کړئ، د بیلګې په توګه، یو شرط اضافه کړئ یا هڅه وکړئ.. کیچ بلاک - او د عملیاتو په اجرا کولو کنټرول ترلاسه کړئ.

د کثافاتو جریان

که تاسو د سندرې د لیکوالانو په باور د بیبی یو ځل بیا (دا بریټني سپیرز دی، هو)، نو په دې شرایطو کې د هټ کلمه معنی لري چې د سندرغاړي لیوالتیا د بیا غږیدلو لپاره ده (دلته د یو بل شرایط تشریح دی. سندره - د ژباړونکي یادښت). دا ښه کیدی شي چې دا هیله به په ریښتیني ژوند کې د تلیفونونو شمیر زیاتوالي لامل شي. مګر په برنامه کولو کې ، دا یو تکرار دی چې کولی شي د خطا لامل شي که چیرې د کال سټیک ډیر شي.

تېروتنې داسې ښکاري:

تېروتنه: د سټیک ځای څخه بهر (څنډه)
داخلي تېروتنه: ډیر تکرار (فایرفاکس)
د رینج ایرر: د کال سټیک اندازې اعظمي حد څخه تیر شو (کروم)

د سټیک اوور فلو رامینځته کیږي که چیرې پراختیا کونکی په تکرار کې بیس قضیه په پام کې ونه نیسي ، یا که کوډ مطلوب قضیه په ګوته نکړي.

function oneMoreTime(stillBelieve=true, loneliness=0) {
    if (!stillBelieve && loneliness < 0) return
    loneliness++
    return oneMoreTime(stillBelieve, loneliness)
}

پدې حالت کې ، سټیل بیلیو هیڅکله غلط کیدی نشي ، نو هر ځل به OneMoreTime ویل کیږي ، مګر فنکشن به هیڅکله بشپړ نشي.

که تاسو په دوو ملګرو تکیه پیل کړئ، دا به یوازیتوب کم کړي، او تاسو به د تلیفون لپاره انتظار ونه کړئ.

function oneMoreTime(stillBelieve=true, loneliness=0) {
    if (!stillBelieve && loneliness < 0) return
    loneliness--
    stillBelieve = false
    return oneMoreTime(stillBelieve, loneliness)
}

یوه بیلګه د لامحدود لوپونو قضیې دي ، کله چې سیسټم د خطا پیغام نه رامینځته کوي ، مګر هغه پاڼه چې د جاواسکریپټ کوډ اجرا کیږي په ساده ډول کنګل کیږي. دا پیښیږي که چیرې د وخت لوپ د پای ته رسیدو حالت ونه لري.

let worldEnded = false
 
while (worldEnded !== true) {
  console.log("Keep on dancin' till the world ends")
}

تاسو کولی شئ ستونزه په لاندې ډول حل کړئ:

let worldEnded = false
 
while (worldEnded !== true) {
  console.log("Keep on dancin' till the world ends")
  worldEnded = true
}

د لامحدود لوپونو او تکرارونو ډیبګ کول

که تاسو د لامحدود لوپ ستونزه لرئ، تاسو اړتیا لرئ چې په کروم یا ایج کې ټب بند کړئ، او په فایرفوکس کې د براوزر کړکۍ وتړئ. له دې وروسته، تاسو اړتیا لرئ په احتیاط سره کوډ تحلیل کړئ. که تاسو ستونزه ونه مومئ ، نو دا ستاسو لوپ یا فنکشن ته د ډیبګر کمانډ اضافه کولو او د متغیرونو ارزښتونو چک کولو ارزښت لري. که پایله د هغه څه سره سمون ونلري چې تمه کیده، نو موږ یې ځای په ځای کوو، دا په اسانۍ سره ترسره کیدی شي.

په پورته مثال کې، ډیبګر باید د فنکشن یا لوپ د لومړۍ کرښې په توګه اضافه شي. بیا تاسو اړتیا لرئ په کروم کې د ډیبګ ټب خلاص کړئ ، په ساحه کې متغیرونه تحلیل کړئ. د بلې تڼۍ په کارولو سره تاسو کولی شئ د هر تکرار سره د دوی بدلونونه تعقیب کړئ. دا ټول کول اسانه دي، او په ډیرو مواردو کې ستونزه موندل کیږي.

تاسو کولی شئ د دې ټولو په اړه نور ولولئ دلته (د کروم لپاره) او دلته (د فایرفوکس لپاره).

د نحوي تېروتنه

په جاواسکریپټ کې یو له خورا عام غلطیو څخه د SyntaxError دی. د متن مدیر غزول به تاسو سره د دوی مخنیوي کې مرسته وکړي. د مثال په توګه، د بریکٹ جوړه رنګیزر د مختلف رنګونو سره کوډ کې بریکٹونه په نښه کوي، او پریټیر یا ورته تحلیلي وسیله دا امکان ورکوي چې ژر تر ژره غلطی ومومي. د SyntaxError احتمال کمولو لپاره غوره انتخاب لږترلږه ځړول دي.

په نظرونو کې شریک کړئ: تاسو د غلطیو مخنیوي یا ژر تر ژره کشف او له مینځه وړو لپاره څه کوئ؟

Skillbox وړاندیز کوي:

سرچینه: www.habr.com

Add a comment