
در دنیای برنامه نویسی، هیچ برنامهای بدون خطا نیست! خطاهای برنامه نویسی به دلایل مختلفی ایجاد میشوند. اگر بتوانیم خطاها را کشف کرده و آنها را برطرف کنیم، هیچ گاه از خطاها و باگها نخواهیم ترسید! در این مقاله به بررسی روشهای کاربردی عیب یابی و رفع خطای جاوا اسکریپت میپردازیم.
به وجود آمدن خطا دلایل مختلفی دارد. در نتیجه خطاها در دسته بندیهای مختلفی قرار میگیرند.
دو نوع از خطاهایی که ممکن است بیشتر با آن مواجه شویم عبارتند از:
- خطای نحوی
خطای نحوی به دلیل غلط بودن املای کلمات یا ساختار کلی کد اتفاق میافتد. معمولاً بخشی از کد یا تمام آن به دلیل داشتن یک خطای نحوی اجرا نخواهد شد. در صورتی که از ابزارهای مناسب در هنگام برنامه نویسی استفاده شود و یا درک معنی پیام های خطا برایتان ساده باشد، رفع خطای نحوی سختی چندانی خواهد داشت.
- خطای منطقی
گاهی اوقات ساختار کد درست است، اما برنامه ما به درستی انجام نمیشود. یعنی برنامه بدون خطا اجرا شده، اما خروجی با نتیجهی مورد انتظار برابر نیست! برای رفع خطاهای منطقی میبایست منطق برنامه را بررسی کرد تا ایراد کار را متوجه شویم.
- خطای زمان اجرا
این نوع خطا در هنگام کامپایل کد مشخص نمیشوند. بلکه در هنگام اجرای برنامه بعضاً باعث ایجاد مشکل در اجرا خواهند شد.
برای آشنایی بیشتر با خطای زمان اجرا و مدیریت خطا در جاوا اسکریپت میتوانید به این صفحه مراجعه کنید.
همان گونه که گفته شده، رفع خطای نحوی با توجه به پیغام خطایی که نمایش داده میشود، کار ساده تری است. در ادامه روشهایی را خواهید آموخت که برسی منطق برنامه را برایتان آسانتر میکند.
فهرست محتوای آموزش
متد console.log برای رفع خطای جاوا اسکریپت
یک روش ساده رفع خطای جاوا اسکریپت، چاپ مقدار متغیرها در بخشهای مختلف برنامه است. با این کار مقدار متغیر (عددی، رشتهای یا آرایهای) مورد نظر را در بخشهای حیاتی برنامه چاپ میکنیم. با بررسی این مقادیر، میتوان فهمید کجای کار محاسبات برنامه ما مشکل دارد.
اولین راه حلی که برای چاپ مقدار متغیر به نظر میرسد استفاده از تابع alert()
است. اگر متغیری به اسم x
را زیر نظر داشته باشیم، با استفاده از کد زیر در هر جایی از برنامه، خواهیم توانست مقدار آنرا بررسی کنیم.
alert(x);
اما این کار کمی غیر حرفهای است! اگر تعداد محل های مورد بررسی یا تعداد متغیرها زیاد باشند، اجرای یک پیغام به ازای هر کدام از آنها کاری غیر منطقی است.
در زبان جاوا اسکریپت یک شئ به نام console در اختیار داریم. این شئ یک متد با نام log()
دارد. هر چیزی که به عنوان ورودی به آن داده شود را در کنسول مرورگر چاپ میکند.
کنسول یکی از تبهای ابزار Developer Tools مرورگر است. و یا میتوان با فشردن کلید F12
این ابزار را باز کرده و به تب console رفت.
x = 16 console.log(x); txt = "Test Text!" console.log(txt);
نحوه دسترسی به ابزار Developer Tools در مرورگرهای مختلف را میتوانید در پایان این صفحه ببینید.
اگر دیتای متغیر به صورت شئ یا آرایه ای از اشیاء باشد، ترفندی برای چاپ آرایه به صورت یک جا وجود دارد که در آخرین بخش مقاله به آن خواهیم پرداخت.
استفاده از Debugger برای عیب یابی کد جاوا اسکریپت
دیباگر برنامه ای است که با استفاده از آن میتوان برنامه را خط به خط اجرا کرد. در هر مرحله مقدار ذخیره شده در متغیرها را بررسی کرد. به کمک این کار، خط به خط با منطق برنامه پیش خواهیم رفت. و در نهایت محلی که باعث مشکل میشود را پیدا میکنیم.
از آن جا که زبان جاوا اسکریپت سمت کاربر و در مرورگر کاربر اجرا میشود، بر روی اکثر مرورگرهای به روز دیباگرهایی برای رفع خطای برنامه نویسی وجود دارد.
اگر بخواهیم برنامه ما تا قسمتی اجرا شود و سپس Debugger مروگر برای بررسی کد اجرا شود، میتوان از کلمه کلیدی debugger در خط مورد نظر استفاده کرد.
var x = 3; var y = 6; debugger; alert( x * y );
وقتی کد به خط سوم برنامه برسد، دیباگر مرورگر باز شده و خواهیم توانست ادامه کد را خط به خط اجرا نماییم.
افزودن breakpoint در کد جاوا اسکریپت
در Debugger میتوان خط هایی را به عنوان نطقه شکست (breakpoint) تعریف کرد. هنگامی که اجرای برنامه به این خط رسید، اجرا متوقف (pause) خواهد شد. در نتیجه میتوان وضعیت برنامه و مقدار متغییرها را بررسی کرد.
استفاده از امکان breakpoint با توجه به محیط اجرای شما ممکن است متفاوت باشد. در این جا به آموزش دیباگ جاوا اسکریپت در مرورگر پایه وبکیت (کروم و فایرفاکس) میپردازیم. در سایر مرورگرها نیز روند کار بسیار مشابه خواهد بود.
مراحل انجام کار به صورت زیر خواهد بود:
- در صفحه برنامه خود، کلید F12 را بزنید.
- در پنجره باز شده، تب source را انتخاب کنید.
- از مسیر نمایش داده شده، فایلی که حاوی کدهای جاوا اسکریپت است را باز کنید.
- با کلیک بر روی شماره خط، شماره خط برجسته و آبی خواهد شد. اکنون یک breakpoint ثبت شده داریم.
- میتوان چندین نقطه شکست برای برنامه تعریف کرد.
- حال صفحه را refresh میکنیم.
خواهید دید که اجرای برنامه در اولین خط مشخص شده متوقف میشود.
از بخش scope میتوان مقدار متغیرهای تعریف شده را مشاهده و بررسی کنیم.
مثال دیباگ جاوا اسکریپت
برای مثال کد بسیار ساده زیر را نوشتهایم. یک حلقه تو در تو برای محاسبه مقدار نهایی متغیر k.
<!doctype html> <html dir="rtl" lang="fa-IR"> <head> </head> <body> <script> var k = 0; for( var i=1; i<5;i++ ){ for( var j=0; j<5;j++ ){ k = k+1; } k = k*2 } document.write(k); </script> </body> </html>
خط 16 از کد را مشخص کرده و سپس دو مرحله از برنامه را اجرا میکنیم.
همانطور که در سمت راست تصویر مشخص است، مقادیر متغیرهای i و j و k به ما نشان داده شده است.

دیباگ جاوا اسکریپت
ترفندهای رفع خطای جاوا اسکریپت
ترفندهایی در استفاده از اشیاء و توابع مختلف برای رفع خطای جاوا اسکریپت وجود دارد. ممکن است گاهی اوقات به ما برای عیب یابی حرفه ای کمک کنند.
سه مورد از این ترفندها عبارتند از:
- چاپ آرایه ها به صورت جدول
- محاسبه زمان اجرای یک قطعه کد
- ردیابی اجرای تابع (trace کردن تابع)
چاپ منظم آرایه در کنسول جاوا اسکریپت
اگر متغیری به صورت آرایهای از اشیاء را بخواهیم در کنسول چاپ کنیم، میتوان از تابع table
در شئ console
استفاده کرد.
خروجی این تابع یک جدول منظم از اطلاعات ذخیره شده در آرایه در قسمت console خواهد بود.
مقلاً فرض کنید متغیر آرایهای شبیه زیر داریم:
var persons = [ { name: 'Omid', age: 22, city: 'Shiraz' }, { name: 'Ehsan', age: 17, city: 'Tabriz' }, { name: 'Nazanin', age: 19, city: 'Tehran' }, ]; console.table(persons);
نتیجه اجرای console.table(persons)
چیزی شبیه زیر در console خواهد بود!

چاپ منظم آرایه در کنسول js
محاسبه زمان اجرای کد js
گاهی اوقات نیاز داریم زمان حدودی اجرای یک تکه کد را بدانیم. هر چند زمان اجرا به پارامترهای مختلفی بستگی دارد، اما با چندین بار اجرا، میتوان یک معیار حدودی به دست آورد.
برای این کار از تابع console.time()
و console.timeEnd()
استفاده کرد.
این دو تابع یک مقدار ورودی رشتهای دریافت میکنند که برچسبی برای شناسایی تایمر است. پس میتوان در یک برنامه چندین تایمر مختلف به کار برد.
console.time('myTimer'); var items = []; for( var i = 0; i < 8000; i++ ){ items.push( {index: i} ); } console.timeEnd('myTimer'); // OUTPUT: // myTimer: 5.111328125ms
ردیابی اجرای تابع یا trace کردن در جاوا اسکریپت
گاهی نیاز است ترتیب اجرای توابع تو در تو را بررسی کنیم. به این کار trace کردن کد گفته میشود.
برای trace کردن یک تابع از متد console.trace()
استفاده میشود.
ورودی این متد یک رشته است که مشخص کننده نام تابع مورد نظر ماست.
نحوه استفاده آن به شکل زیر است:
console.trace("testFunction");
جمع بندی: آموزش رفع خطا در جاوا اسکریپت
در ابن مقاله به آموزش رفع خطای جاوا اسکریپت پرداختیم. فهمیدیم خطاها انواع مختلفی دارند و با دو نوع از آنها مختصراً آشنا شدیم.
روشهایی برای پیدا کردن خطای منطقی در جاوا اسکریپت آموختیم. هر چند رفع خطای پروژه های بزرگ به این سادگی نیست، اما با این روشها زمان زیادی صرفه جویی میشود.
در پروژه های کوچک معمولا با چاپ مقادیر متغیرها به کمک شئ console میتوان مشکل را برطرف کرد.
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
من یاسین قربان حسنی هستم
سلام داداش این ارور چرا به وجود اومده خیلی به این سایت احتیاج دارم
خطای برنامه: یک استثنا در سمت سرویس گیرنده رخ داده است (برای اطلاعات بیشتر به کنسول مرورگر مراجعه کنید) .
سلام
اینطور نمیشه جواب مناسبی داد. با توسعه دهنده وبسایت مورد نظرتون در ارتباط باشید. خوبه که بخش کنسول رو نگاه کنید و اگه خطایی نشون داده براشون ارسال کنید تا شاید بهتر مشکل رو بررسی کنند.
Unexpected token ‘<', "<!DOCTYPE "… is not valid JSON
سلام
من وارد سایتی میشم و برای انجام تراکنش و تایید اون همچین خطایی رو ثبت میکنه, ممنون میشم راهنمایی کنید
سلام
به نظر پاسخ json که از سمت سرور میگیره json خالی نیست و کاراکترهایی از html هم داره. اگه به عنوان کاربر هستید، بهتره با پشتیبانی سایت مربوطه ارتباط برقرار کنید.
سلام خسته نباشید
من از JS استفاده میکنم مثلا برای سرچ باکس ک باز و بسته بشه یا هرچیز دیگ، اصلا عمل نمیکنه انگار ن انگار JS زدم کد هام کاملا درسته یا حتی از سورس کد های آماده استفاده میکنم ولی باز تو هیچ مرورگریم عمب نمیکنه علتش چیه؟
سلام
سعی کنید خطوطتون رو خط به خط از قسمت console مرورگیر بزنید ببینید چیزی اعمال میشه یا نه.
و اینکه ممکنه تگی یا نحوه فراخوانی کدهاتون مشکلی داشته باشه.
سلام من چهار تا فرم دارم و میخوام که روی هر کدام از فرم ها که اطلاعات وارد نشد با رنگ قرمز و وارد شد با رنگ سبز نشان دهد برای این کار اول ۴ تا فرم با چهار تا فانکش برای هر کدام از فرم ها اجرا میکنم و شرط ها و قواعد را رعایت کرده و return برگرداند را تازمانی که اطلاعات مورد پذیرش نیست فالس قرار دادم و تمام نام فانکشن ها را در فرم جمع کردم و وقتی که وارد فرم میشویم و اطلاعات را وارد می کنیم و دکمه ثاب میت را فشرده فرم پایین آمده و اطلاعات درست اجرا می شود اما خیلی سریع این حالت بی نظمی و خیلی سریع در کمتر از صدم ثانیه قرمز یا سبز می شود حداقل باید نیم ثانیه صبر کند و فرم هی ب پایین می رود
سلام
دقیق متوجه مشکلتون نشدم! میخواید زمان بیشتری برای این پردازش طول بکشه؟ یا مسئله دیگهای هست؟
خطای typeerror document forms .rdo weight select is undefined به چه معنی هست؟
کجا دارید چنین اروری میگیرید؟
دارید سعی میکنین یه چیزی که تعریف نشده رو استفاده کنید احتمالاً.
range error:maximum call size exceeded این ارورو چطور میطونم رفع کنم
این خطا معمولاً برای زمانی هست که احتمالاً یه تابعی رو صدا زدید و اون مجدداً یه تابع دیگه رو صدا زده و الی آخر. این اتفاق اینقدر تکرار میشه تا Call Stack شما پر میشه و خطا میگیرد.
بسته به کدتون، بررسی کنید احتمالاً کجا به چنین موردی برخورد میکنه.
علت این خطاThe resource was preloaded using link preload but not used within a few seconds from the window’s load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.
سلام
در حال بهینهسازی یک صفحه وب هستید که به این مورد برخوردید؟!
احتمالاً یک فایل با تگ preload توی صفحه دارید که در همون بارگذاری اولیه صفحه (بالاترین بخشی که از صفحه موقع باز شدن میبینید) استفاده نمیشه.
سلام ممنون میشم بتونم با شما ارتباط بگیرم با تشکر
اگر سؤالی درمورد مباحث آموزشی دارید بهتره از طریق جلسات آموزشی مربوطه توی سایت اقدام کنید.
اگر موردی خاصی غیر از آموزش هست، از بخش تماس میتونید فرم رو تکمیل کنید. 🙂
من وارد سایتی شدم بعد از یوزر و پسورد این عبارت رو میده
سلام
این خطا مربوط به سیستم سایتشون هست و احتمال زیاد از شما نیست. بهتره به پشتیبانیشون اطلاع بدید.
با سلام
ما با خطای SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data مواجهیم ممنون میشم راهنمایی کنین
سلام
این خطا یک خطای گرامری جاوا اسکریپتی هست (بیشتر بدونید: انواع خطا در برنامه نویسی)
احتمالاً دارید سعی میکنید یک متن رو در ساختار json با جاوا اسکریپت بخونید اما اون متن ساختارش JSON نیست و این خطا داده میشه. باید ساختارش رو چک کنید؛ احتمالاً اولش کاراکتر اشتباهی هست یا فقط یه متن سادست.
اگه مستقیماً بهش دسترسی ندارید، قبل از اینکه پردازشش کنید، در کنسول نمایشش بدید تا متوجه خطا بشید.
با سلام و آرزوی توفیق عزیزان . هر چقدر تلاش کردم نتوانستم با استفاده از دستور (“asahghgsh”)console.log مقدار موجود در بین پرانتز را در مانیتور ببینم
منظورم در محیط جاوا اسکریپت هست . برنامه error هم نمی گیرد
سلام
کد رو داخل سورس صفحه قرار میدید؟ اگر آره حتماً باید در بین تگهای script باشه.
اگر همینطوره، بررسی کنید که در تب Console مرورگر هستید.
در نهایت هم دستورتون رو در همین محیط کنسول وارد کنید ببینید بهتون خروجی میده یا نه؟!
سلام سوالی داشتم در مورد پلاگین اپلود فایل که این پلاگین موقعی که فایلی رو انتخاب میکنم نشون نمیده
اسم پلاگین هست jquery file upload چهار تا فایل داره که بنام های basic.html ,basic-plus .html
,advanced.html ,basc
ک فایلی که خروجیش بیشتر مهم برامم basic-plus .html و advanced.html هست .نیاز به جاوا کار حرفه ای داره که کدای سمت کاربرش رو رفع باگ کنه البته سمت سرور هم داره php ولی باید بررسی بشه که چرا تصویر نمیده باید فایلو براتون اپلود کنم کجا براتون ارسال کنم
سلام
فرزاد عزیز، همونطور که گفتید این کار نیاز به دیباگ کردن و رفع خطا یا تداخل با سایر پلاگینها داره. تیم ما فعلاً فرصت دیباگینگ پروژهها رو نداره. پیشنهاد میکنیم ابتدا از درست بودن پلاگین مطمئن بشید و سپس بررسی کنید که این پلاگین با سایر پلاگینها و کدهاتون تداخلی نداشته باشه. این دو مورد، رایجترین ایرادات در موارد مشابه شما هستند.
برای من این ارور رو میده چکار کنم ؟ Uncaught TypeError: Cannot read property ‘innerHTML’ of null
at bootStart (:45:9)
به نظرم دارید سعی میکنید یک عنصر در وب (عناصر DOM) رو انتخاب کنید و با محتویاتش کاری انجام بدید. اگر بله، این خطا احتمالاً به این خاطر هست که عنصر رو به درستی انتخاب نکردید یا عنصرتون توی اون صفحه وجود نداره.
سلام من وارد یه سایت شدم میخواستم
عضو بشم اما همش خطا میزد و به انگلیسی می نوشت جاوااسکریپت و کوکی غیر فعال هستند پس از فعال سازی صفحه را مجدد بار گیری کنید
کوکوهای مرور گر من فعال بود اما من نتونستم وارد سایت بشم خواهشاً کمک کنید
سلام
این یک خطای برنامهنویسی نیست اما میتونه دلایل مختلفی داشته باشه.
ممکنه برنامههای جاوا اسکریپت سایت به درستی لود نشده باشند (به دلیل اتصال اینترنت) یا مشکلی در مروگر وجود داشته باشه.
بهتره ابتدا کش مرورگر رو پاک کنید، سایت رو مجدداً با
ctrl + F5
رفرش کنید، اگر همچنان خطا برقرار بود، از یه مرورگر یا دستگاه دیگه هم تست کنید.موفق باشید.
این ها رو مدیر سایت باید بزنه درسته
کدهای جاوااسکریپت سمت کاربر اجرا میشن و روش دیباگ رو میتونید شما روی هر سایتی اجرایی کنید.
اما اگر نیازه به فایلها دسترسی داشته باشید؛ بله، حتما باید مدیر سایت کدهای لازم رو داخل فایلها قرار بده
اگر هم صرفا برای تسته، میتونید یک کپی از کدهایجاوااسکریپت سایت بگیرید و روی سیستمتون تست کنید.
موفق باشید
با عرض تشکر و ممنون از سایت خوبتان ، امکان داره راهی پیشنهاد کنید که بتوان کدهای php موجود در یک سایت را مشاهده کرد؟
کدهای php جزء کدهای سمت سرور هستند…
یعنی اجرای اونها سمت سرور سایت انجام میشه؛ سپس نتیجه و خروجی اون برای شما ارسال میشه
در نتیجه دیدن کدهای سمت سرور یک سایت امکانپذیر نیست!
موفق باشید.
با عرض سلام ، چه طور می شود کدهای جی کوئری یک سایت را بدست آورد با تشکر
سلام
کدهای جیکوئری سمت کاربر اجرا میشوند. یعنی اگر سورس سایت رو بررسی کنید میتونید کدهای جاوااسکریپت و جیکوئری رو مشاهده کنید.
معمولاً این کدها در داخل صفحه هستند و یا در فایلهای جداگانهای با فرمت
js
که در همون سورس قابل مشاهده هست.توی مروگر کلیدهای ترکیبی
Ctrl+U
رو بزنید یا با راست کلیک کردن، گزینه view page source رو انتخاب کنید.موفق باشید.
کامل و مفید ممنون
خوشحالم که مورد استفادتون قرار گرفته… 😉