آموزش جاوا اسکریپت

اشتباهات رایج در جاوا اسکریپت

آموزش جاوا اسکریپت از مبتدی تا حرفه ای

در این درس از مجموعه آموزش های جاوا اسکریپت در بانک پروژه به برخی از اشتباهات رایج در زبان برنامه نویسی جاوا اسکریپت اشاره شده است.


استفاده تصادفی از اپراتور انتساب

اگر یک برنامه نویس به طور تصادفی در عبارت if ، به جای یک عملگر مقایسه ( == ) ، از یک عملگر انتساب ( = ) استفاده کند، برنامه های جاوا اسکریپت ممکن است نتایج غیر منتظره ای ایجاد کنند.

در کد زیر دستور if مقدار false (همانطور که انتظار می رود) برمی گرداند زیرا x برابر با 10 نیست:

خودتان آزمایش کنید

در کد زیر دستور if مقدار true (که شاید مطابق انتظار نباشد) برمی گرداند، زیرا 10 معادل با مقدار true است:

خودتان آزمایش کنید

در کد زیر دستور if مقدار false (که شاید مطابق انتظار نباشد) برمی گرداند، زیرا 0 معادل با مقدار false است:

خودتان آزمایش کنید

یک انتساب همیشه مقدار انتساب را برمی گرداند.


اشتباه در مقایسه عادی

در مقایسه عادی، نوع داده مهم نیست، بنابراین در کد زیر نتیجه عبارت if مقدار true است:

خودتان آزمایش کنید

در مقایسه دقیق ، نوع داده مهم است، در نتیجه در کد زیر نتیجه عبارت if مقدار false است زیرا دو متغیر x و y از لحاظ نوع، یکسان نیستند:

خودتان آزمایش کنید

این یک اشتباه رایج است که فراموش کنیم عبارات switch از مقایسه دقیق استفاده می کنند:

عبارت switch در کد زیر یک هشدار را نمایش می دهد:

خودتان آزمایش کنید

در عبارت switch زیر، هشدار نمایش داده نمی شود زیرا عبارت switch از مقایسه دقیق استفاده می کند:

خودتان آزمایش کنید


اشتباه بین عمل جمع و اتصال

عمل جمع (Addition) در مورد جمع اعداد است در حالی که اتصال (Concatenation) در مورد اتصال رشته ها است.

در جاوا اسکریپت هر دو عملکرد جمع اعداد و اتصال رشته ها از عملگر (+) استفاده می کنند.

به همین دلیل ، افزودن یک عدد به عنوان یک عدد نتیجه ای متفاوت با افزودن یک عدد به عنوان یک رشته خواهد داشت:

خودتان آزمایش کنید

بنابراین، هنگام افزودن دو متغیر ، پیش بینی نتیجه دشوار است:

خودتان آزمایش کنید

سوتفاهم در اعداد اعشاری float

تمام اعداد در جاوا اسکریپت به صورت اعداد (Float) اعشاری 64 بیتی ذخیره می شوند.

همه زبان های برنامه نویسی ، از جمله جاوا اسکریپت، با مقادیر دقیق اعشار مشکل دارند:

خودتان آزمایش کنید

برای حل مسئله فوق ، باید از ضرب و تقسیم کمک بگیریم:

مثالها

خودتان آزمایش کنید

شکستن یک رشته جاوا اسکریپت

جاوا اسکریپت به شما امکان می دهد یک دستور را به دو خط تقسیم کنید:

مثالها

خودتان آزمایش کنید

اما شکستن یک عبارت از وسط یک رشته کار نخواهد کرد:

مثالها

خودتان آزمایش کنید

اگر لازم باشد عبارتی را از درون یک رشته بشکنید ، باید از “بک اسلش” استفاده کنید:

مثالها

خودتان آزمایش کنید

نقطه ویرگول (;) در جای نادرست

به دلیل یک نقطه ویرگول نابجا در کد زیر، این بلوک کد بدون در نظر گرفتن مقدار x اجرا خواهد شد:

خودتان آزمایش کنید

شکستن دستور return

جاوا اسکریپت به طور خودکار یک دستور را در انتهای یک خط می بندد.

به همین دلیل ، این دو مثال یک نتیجه را برمی گردانند:

مثالها

خودتان آزمایش کنید

مثالها

خودتان آزمایش کنید

جاوا اسکریپت به شما این امکان را می دهد که یک دستور را به دو خط تقسیم کنید.

به همین دلیل ، مثال 3 نیز همان نتیجه را برمی گرداند:

مثالها

خودتان آزمایش کنید

اما ، اگر دستور return را در دو خط مانند کد زیر بشکنید ، چه اتفاقی می افتد؟

مثالها

خودتان آزمایش کنید

تابع مقدار undefined را باز خواهد گرداند!

چرا؟ از آنجا که جاوا اسکریپت فکر کرد منظورتان این است:

مثالها

خودتان آزمایش کنید

توضیح

اگر دستوری ناقص باشد مانند:

جاوا اسکریپت سعی می کند با خواندن سطر بعدی دستور را تکمیل کند:

اما از آنجا که این دستور کامل است:

جاوا اسکریپت به طور خودکار آن را مانند این حالت می بندد:

بدلیل اینکه بستن (پایان دادن) عبارات با نقطه ویرگول در جاوا اسکریپت اختیاری است، این اتفاق می افتد.

جاوا اسکریپت دستور return را در انتهای خط می بندد ، زیرا یک دستور کامل است.

نکته مهم : هرگز دستور return را نشکنید.


دسترسی به آرایه های انجمنی

بسیاری از زبان های برنامه نویسی از آرایه های انجمنی پشتیبانی می کنند. به آرایه هایی با اندیس های مشخص شده آرایه های انجمنی (یا هش) گفته می شود.

جاوا اسکریپت از آرایه های انجمنی پشتیبانی نمی کند.

در جاوا اسکریپت ، آرایه ها از شاخص های شماره گذاری شده استفاده می کنند :  

مثالها

خودتان آزمایش کنید

در جاوا اسکریپت ، اشیا از اندیس های نامگذاری شده استفاده می کنند .

اگر از آرایه انجمنی استفاده کنید ، هنگام دسترسی به آرایه ، جاوا اسکریپت آرایه را بصورت یک شیء استاندارد تعریف مجدد می کند.

در نتیجه پس از تعریف مجدد خودکار ، متد ها و خصوصیات آرایه نتایج نامشخص یا اشتباهی ایجاد می کنند:

مثالها

خودتان آزمایش کنید

پایان دادن به تعاریف با کاما

ویرگولهای انتهایی در تعریف شی و آرایه در ECMAScript 5 قانونی هستند.

مثال شی:

مثال آرایه:

هشدار !!

اینترنت اکسپلورر 8 خراب می شود.

JSON اجازه استفاده از ویرگول انتهایی را نمی دهد.

JSON:

JSON:


مقدار Undefined با Null برابر نیست

اشیا ، متغیرها ، خصوصیات و متد های جاوا اسکریپت می توانند undefined باشند.

علاوه بر این ، اشیا خالی جاوا اسکریپت می توانند دارای مقدار null باشند.

این قضیه می تواند آزمایش خالی بودن یک شیء را کمی دشوار کند.

با آزمایش نوع می توانید اشیا را آزمایش کنید که undefinedهستند یا خیر:

مثالها

خودتان آزمایش کنید

اما نمی توانید شی را برای تشخیص null بودن، امتحان کنید، زیرا اگر این شی undefined باشد خطا ایجاد می کند:

غلط:

برای حل این مشکل ، باید آزمایش کنید که یک شی نه null باشد نه undefined.

اما این کار نیز هنوز می تواند خطایی ایجاد کند:

غلط:

به همین دلیل ، شما باید ابتدا بررسی کنید که شیء undefined نباشد، سپس null بودن را امتحان کنید:

درست:

خودتان آزمایش کنید

منبع : W3Schools.com


دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *