புரோஹோஸ்டர் > Блог > இணைய செய்தி > அச்சச்சோ, நான் அதை மீண்டும் செய்தேன்: JavaScript இல் உள்ள பொதுவான பிழைகளை பிழைத்திருத்தம்
அச்சச்சோ, நான் அதை மீண்டும் செய்தேன்: JavaScript இல் உள்ள பொதுவான பிழைகளை பிழைத்திருத்தம்
ஜாவாஸ்கிரிப்ட் குறியீட்டை எழுதுவது சவாலாகவும் சில சமயங்களில் பயமுறுத்துவதாகவும் இருக்கலாம், ஏனெனில் பல டெவலப்பர்கள் நன்கு அறிந்திருக்கிறார்கள். வேலையின் செயல்பாட்டில், பிழைகள் தவிர்க்க முடியாமல் எழுகின்றன, அவற்றில் சில அடிக்கடி மீண்டும் மீண்டும் செய்யப்படுகின்றன. புதிய டெவலப்பர்களை இலக்காகக் கொண்ட இந்த கட்டுரை, இந்த பிழைகள் மற்றும் அவற்றை எவ்வாறு தீர்ப்பது என்பதைப் பற்றி பேசுகிறது. தெளிவுக்காக, செயல்பாடுகள், பண்புகள் மற்றும் பொருள்களின் பெயர்கள் எடுக்கப்பட்டன பிரபலமான பாடல். இவை அனைத்தும் பொதுவான தவறுகளை எவ்வாறு சரிசெய்வது என்பதை விரைவாக நினைவில் வைக்க உதவுகிறது.
நாங்கள் நினைவூட்டுகிறோம்:"Habr" இன் அனைத்து வாசகர்களுக்கும் - "Habr" விளம்பரக் குறியீட்டைப் பயன்படுத்தி எந்த Skillbox படிப்பிலும் சேரும்போது 10 ரூபிள் தள்ளுபடி.
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 என்று மாற்றினால், எல்லாம் வேலை செய்யும் மற்றும் நிரல் லக்கியை வழங்கும்.
ஒரு புரோகிராமர் ஒரு குறிப்பிட்ட வகையுடன் பொருந்தாத தரவுகளில் செயல்களைச் செய்ய முயற்சிக்கும்போது தட்டச்சுப் பிழைகள் ஏற்படுகின்றன. எடுத்துக்காட்டுகளில் .bold(), வரையறுக்கப்படாத சொத்தைக் கேட்பது அல்லது உண்மையில் செயல்பாடு இல்லாத செயல்பாட்டை அழைப்பது ஆகியவை அடங்கும்.
எனவே, நீங்கள் girl() ஐ அழைக்க முயற்சித்தால், Uncaught TypeError என்ற பிழையைப் பெறுவீர்கள்: yourVariable.bold என்பது ஒரு செயல்பாடு அல்ல, பெண் ஒரு செயல்பாடு அல்ல, ஏனெனில் இது உண்மையில் அழைக்கப்படும் ஒரு பொருள், செயல்பாடு அல்ல.
பிழைகளை அகற்ற, நீங்கள் மாறிகளைப் படிக்க வேண்டும். எனவே, பெண் என்றால் என்ன? பெண்ணின் பெயர் என்ன? குறியீட்டை பகுப்பாய்வு செய்வதன் மூலம், console.log, பிழைத்திருத்த கட்டளையைப் பயன்படுத்தி மாறிகளைக் காண்பிப்பதன் மூலம் அல்லது கன்சோலில் உள்ள மாறி பெயரை அழைப்பதன் மூலம் நீங்கள் கண்டுபிடிக்கலாம். மாறியில் உள்ள தரவு வகையை இயக்குவது சாத்தியமா என்பதை நீங்கள் உறுதி செய்ய வேண்டும். இது பொருந்தவில்லை என்றால், அதை மாற்றவும், எடுத்துக்காட்டாக, நிபந்தனையைச் சேர்க்கவும் அல்லது முயற்சி செய்யவும்.
அடுக்கு வழிதல்
பேபி ஒன் மோர் டைம் (இது பிரிட்னி ஸ்பியர்ஸ், ஆம்) பாடலின் வரிகளின் ஆசிரியர்களை நீங்கள் நம்பினால், இந்த சூழலில் ஹிட் என்ற வார்த்தை பாடகரின் விருப்பத்தை மீண்டும் அழைக்க வேண்டும் என்பதாகும் (இங்கே அதன் சூழலின் விளக்கம் உள்ளது. பாடல் - மொழிபெயர்ப்பாளரின் குறிப்பு). இந்த ஆசை நிஜ வாழ்க்கையில் அழைப்புகளின் எண்ணிக்கையை அதிகரிக்க வழிவகுக்கும். ஆனால் நிரலாக்கத்தில், இது ஒரு மறுநிகழ்வாகும், இது அழைப்பு அடுக்கு அதிகமாக இருந்தால் பிழையை ஏற்படுத்தும்.
பிழைகள் இப்படி இருக்கும்:
பிழை: ஸ்டாக் இடம் இல்லை (எட்ஜ்)
அகப் பிழை: அதிகப்படியான மறுநிகழ்வு (பயர்பாக்ஸ்)
வரம்புப் பிழை: அதிகபட்ச அழைப்பு அடுக்கு அளவை மீறியது (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)
}
ஒரு உதாரணம், எல்லையற்ற சுழல்கள் கொண்ட வழக்குகள், கணினி ஒரு பிழை செய்தியை உருவாக்கவில்லை, ஆனால் ஜாவாஸ்கிரிப்ட் குறியீடு செயல்படுத்தப்படும் பக்கம் வெறுமனே உறைகிறது. 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 அல்லது Edge இல் தாவலை மூட வேண்டும், மேலும் Firefox இல் உலாவி சாளரத்தை மூட வேண்டும். இதற்குப் பிறகு, நீங்கள் குறியீட்டை கவனமாக பகுப்பாய்வு செய்ய வேண்டும். நீங்கள் சிக்கலைக் கண்டுபிடிக்க முடியாவிட்டால், உங்கள் லூப் அல்லது செயல்பாட்டில் பிழைத்திருத்த கட்டளையைச் சேர்த்து மாறிகளின் மதிப்புகளைச் சரிபார்க்க வேண்டியது அவசியம். முடிவு எதிர்பார்த்ததை ஒத்திருக்கவில்லை என்றால், அதை மாற்றுவோம், இதை எளிதாக செய்ய முடியும்.
மேலே உள்ள எடுத்துக்காட்டில், செயல்பாடு அல்லது வளையத்தின் முதல் வரியாக பிழைத்திருத்தி சேர்க்கப்பட வேண்டும். பின்னர் நீங்கள் Chrome இல் பிழைத்திருத்த தாவலைத் திறக்க வேண்டும், ஸ்கோப்பில் உள்ள மாறிகளை பகுப்பாய்வு செய்யுங்கள். அடுத்த பொத்தானைப் பயன்படுத்தி, ஒவ்வொரு மறு செய்கையிலும் அவற்றின் மாற்றங்களைக் கண்காணிக்கலாம். இவை அனைத்தும் செய்ய எளிதானது, பெரும்பாலான சந்தர்ப்பங்களில் சிக்கல் காணப்படுகிறது.
ஜாவாஸ்கிரிப்ட்டில் மிகவும் பொதுவான பிழைகளில் ஒன்று தொடரியல் பிழை. உரை திருத்தி நீட்டிப்புகள் அவற்றைத் தவிர்க்க உதவும். எடுத்துக்காட்டாக, அடைப்பு ஜோடி வண்ணமயமாக்கல் குறியீட்டில் அடைப்புக்குறிகளை வெவ்வேறு வண்ணங்களுடன் குறிக்கிறது, மேலும் பிரிட்டியர் அல்லது ஒத்த பகுப்பாய்வுக் கருவி பிழைகளை விரைவாகக் கண்டறிய உதவுகிறது. SyntaxError ஏற்படுவதற்கான வாய்ப்பைக் குறைப்பதற்கான சிறந்த வழி குறைந்தபட்ச கூடு கட்டுதல் ஆகும்.
கருத்துகளில் பகிரவும்: தவறுகளைத் தடுக்க அல்லது அவற்றை விரைவாகக் கண்டறிந்து அகற்ற என்ன செய்ய வேண்டும்?