අපොයි, මම එය නැවත කළා: JavaScript හි පොදු දෝෂ නිදොස් කිරීම

අපොයි, මම එය නැවත කළා: JavaScript හි පොදු දෝෂ නිදොස් කිරීම

බොහෝ සංවර්ධකයින් හුරුපුරුදු බැවින් JavaScript කේතය ලිවීම අභියෝගාත්මක සහ සමහර විට බිය ගැන්වීමක් විය හැකිය. වැඩ කිරීමේ ක්රියාවලියේදී, දෝෂ අනිවාර්යයෙන්ම පැනනගින අතර, ඒවායින් සමහරක් නිතර නිතර පුනරාවර්තනය වේ. නවක සංවර්ධකයින් ඉලක්ක කරගත් මෙම ලිපිය, මෙම දෝෂ සහ ඒවා විසඳන්නේ කෙසේද යන්න ගැන කතා කරයි. පැහැදිලිකම සඳහා, කාර්යයන්, ගුණාංග සහ වස්තූන්ගේ නම් ලබාගෙන ඇත ජනප්රිය ගීතය. පොදු වැරදි නිවැරදි කරන්නේ කෙසේදැයි ඉක්මනින් මතක තබා ගැනීමට මේ සියල්ල ඔබට උපකාරී වේ.

අපි ඔබට මතක් කරමු: "Habr" හි සියලුම පාඨකයින් සඳහා - "Habr" ප්‍රවර්ධන කේතය භාවිතයෙන් ඕනෑම Skillbox පාඨමාලාවකට ලියාපදිංචි වන විට රූබල් 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)

ඉහත උදාහරණ කේතය මඟින් දෝෂය ඇති කරයි Uncaught TypeError: Undefined හි දේපල 'වාසනාවන්ත' කියවිය නොහැක. ප්‍රශ්නය නම් ගැහැණු වස්තුවට නම් දේපලක් තිබුනත් එහි නම් දේපලක් නොමැති වීමයි. ගැහැණු ළමයා නම් කරන ලද දේපල අර්ථ දක්වා නොමැති බැවින්, ඔබට එයට ප්‍රවේශ විය නොහැක, මන්ද එය විධිමත් ලෙස නොපවතී. නමුත් ඔබ girl.named.lucky වෙනුවට girl.name නම්, එවිට සියල්ල ක්‍රියාත්මක වන අතර වැඩසටහන Lucky නැවත ලබා දෙනු ඇත.

ඔබට දේපල ගැන වැඩිදුර ඉගෙන ගත හැකිය මෙහි කියවන්න.

TypeErrors විසඳන ආකාරය

ක්‍රමලේඛකයෙකු නිශ්චිත වර්ගයකට නොගැලපෙන දත්ත මත ක්‍රියා කිරීමට උත්සාහ කරන විට TypeErrors හට ගනී. උදාහරණ ලෙස .bold() භාවිතා කිරීම, නිර්වචනය නොකළ දේපලක් ඉල්ලා සිටීම හෝ ඇත්ත වශයෙන්ම ශ්‍රිතයක් නොවන ශ්‍රිතයක් ඇමතීම ඇතුළත් වේ.

ඉතින්, ඔබ girl() ඇමතීමට උත්සාහ කළහොත්, ඔබට දෝෂයක් ලැබෙනු ඇත Uncaught TypeError: yourVariable.bold යනු ශ්‍රිතයක් නොවන අතර ගැහැණු ළමයා යනු ශ්‍රිතයක් නොවේ, මන්ද එය සැබවින්ම හඳුන්වනු ලබන වස්තුවක් මිස ශ්‍රිතයක් නොවේ.

දෝෂ ඉවත් කිරීම සඳහා, ඔබ විචල්යයන් අධ්යයනය කළ යුතුය. ඉතින්, ගැහැණු ළමයෙක් යනු කුමක්ද? ගැහැණු ළමයාගේ නම කුමක්ද? ඔබට කේතය විශ්ලේෂණය කිරීමෙන්, console.log භාවිතයෙන් විචල්‍ය ප්‍රදර්ශනය කිරීමෙන්, දෝශ නිරාකරණ විධානය කිරීමෙන් හෝ කොන්සෝලයේ විචල්‍ය නාමය ඇමතීමෙන් ඔබට එය සොයාගත හැකිය. විචල්‍යයේ අඩංගු දත්ත වර්ගය මත ක්‍රියා කළ හැකි බවට ඔබ සහතික විය යුතුය. එය නොගැලපේ නම්, එය වෙනස් කරන්න, උදාහරණයක් ලෙස, කොන්දේසියක් එක් කරන්න හෝ උත්සාහ කරන්න..බ්ලොක් අල්ලා ගන්න - සහ මෙහෙයුම ක්රියාත්මක කිරීම පාලනය කරන්න.

පිටාර ගැලීම

Baby One More Time (මෙය Britney Spears, ඔව්) ගීතයේ පද රචකයන් විශ්වාස කරන්නේ නම්, මෙම සන්දර්භය තුළ පහර යන වචනයෙන් අදහස් කරන්නේ ගායකයාගේ නැවත කැඳවීමට ඇති ආශාවයි (මෙහි සන්දර්භය පිළිබඳ පැහැදිලි කිරීමක් ගීතය - පරිවර්තකයාගේ සටහන). මෙම ආශාව සැබෑ ජීවිතයේ ඇමතුම් ගණන වැඩි වීමට හේතු විය හැක. නමුත් ක්‍රමලේඛනයේදී මෙය ඇමතුම් තොගය උතුරා ගියහොත් දෝෂයක් ඇති විය හැකි පුනරාවර්තනයකි.

දෝෂ මේ ආකාරයෙන් පෙනේ:

දෝෂය: තොග ඉඩ අවසන් (Edge)
අභ්‍යන්තර දෝෂය: ඕනෑවට වඩා පුනරාවර්තනය (ෆයර්ෆොක්ස්)
RangeError: උපරිම ඇමතුම් තොග ප්‍රමාණය ඉක්මවා ඇත (Chrome)

සංවර්ධකයා පුනරාවර්තනයේ පාදක නඩුව නොසලකන්නේ නම් හෝ කේතය අපේක්ෂිත අවස්ථාවට ආමන්ත්‍රණය නොකරන්නේ නම් තොග පිටාර ගැලීමක් සිදුවේ.

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

මෙම අවස්ථාවෙහිදී, stillBelieve කිසිවිටෙක අසත්‍ය විය නොහැක, එබැවින් oneMoreTime සෑම විටම කැඳවනු ඇත, නමුත් කාර්යය කිසිදා සම්පූර්ණ නොවනු ඇත.

ඔබ මිතුරන් දෙදෙනෙකු මත විශ්වාසය තැබීමට පටන් ගන්නේ නම්, මෙය තනිකම අඩු කරනු ඇත, ඔබට ඇමතුමක් බලා සිටීමට සිදු නොවේ.

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

උදාහරණයක් ලෙස, අසීමිත ලූප සහිත අවස්ථා, පද්ධතිය දෝෂ පණිවිඩයක් ජනනය නොකරන විට, නමුත් JavaScript කේතය ක්‍රියාත්මක කරන පිටුව හුදෙක් කැටි වේ. while loop එක අවසන් කිරීමේ කොන්දේසියක් නොමැති නම් මෙය සිදු වේ.

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
}

අනන්ත ලූප සහ පුනරාවර්තන නිදොස් කිරීම

ඔබට අසීමිත ලූප් ගැටලුවක් තිබේ නම්, ඔබට ක්‍රෝම් හෝ එජ් හි ටැබ් එක වසා දැමිය යුතු අතර, ෆයර්ෆොක්ස් හි බ්‍රව්සර් කවුළුව වසා දමන්න. මෙයින් පසු, ඔබ කේතය ප්රවේශමෙන් විශ්ලේෂණය කළ යුතුය. ඔබට ගැටලුව සොයාගත නොහැකි නම්, ඔබේ ලූපයට හෝ ක්‍රියාකාරීත්වයට නිදොස් කිරීමේ විධානයක් එක් කර විචල්‍යවල අගයන් පරීක්ෂා කිරීම වටී. ප්රතිඵලය අපේක්ෂා කළ දේට අනුරූප නොවේ නම්, අපි එය ප්රතිස්ථාපනය කරමු, මෙය පහසුවෙන් කළ හැකිය.

ඉහත උදාහරණයේ, ශ්‍රිතයේ හෝ ලූපයේ පළමු පේළිය ලෙස නිදොස්කරණය එක් කළ යුතුය. එවිට ඔබට ක්‍රෝම් හි දෝශ නිරාකරණ ටැබය විවෘත කළ යුතුය, විෂය පථයේ විචල්‍යයන් විශ්ලේෂණය කරයි. ඊළඟ බොත්තම භාවිතයෙන් ඔබට එක් එක් පුනරාවර්තනයකදී ඒවායේ වෙනස්කම් නිරීක්ෂණය කළ හැකිය. මේ සියල්ල කිරීමට පහසු වන අතර, බොහෝ අවස්ථාවලදී ගැටලුව සොයා ගනී.

ඔබට මේ සියල්ල ගැන වැඩි විස්තර මෙතැනින් කියවිය හැකිය (chrome සඳහා) මෙහි (Firefox සඳහා).

වාක්‍ය ඛණ්ඩ දෝෂය

ජාවාස්ක්‍රිප්ට් වල බහුලව දක්නට ලැබෙන දෝෂයක් වන්නේ සින්ටැක්ස් දෝෂයයි. පෙළ සංස්කාරක දිගු ඔබට ඒවා වළක්වා ගැනීමට උපකාරී වනු ඇත. උදාහරණයක් ලෙස, Bracket Pair Colorizer විවිධ වර්ණ සහිත කේතයේ වරහන් සලකුණු කරයි, සහ Prettier හෝ සමාන විශ්ලේෂණ මෙවලමක් මඟින් දෝෂ ඉක්මනින් සොයා ගැනීමට හැකි වේ. SyntaxError හි සම්භාවිතාව අවම කිරීම සඳහා හොඳම විකල්පය වන්නේ අවම කූඩුවයි.

අදහස් බෙදාගන්න: වැරදි වළක්වා ගැනීමට හෝ ඉක්මනින් හඳුනාගෙන ඒවා ඉවත් කිරීමට ඔබ කරන්නේ කුමක්ද?

Skillbox නිර්දේශ කරයි:

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න