دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۲
  • آبان

جلسه ۴۹ : اشتباهات رایج در جاوا اسکریپت

  • دسته‌بندی‌ها :
جلسه ۴۹ : اشتباهات رایج در جاوا اسکریپت
    • جزئیات
    • نوع محتواآموزش تصویری

      مقدمه

      با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، در دو بخش اخیر به بررسی قواعد و اصول کد نویسی صحیح در جاوا اسکریپت که جلوی بسیاری از خطاها و مشکلات کدها را می گیرد پرداختیم. برخی از این اصول برای افزایش خوانایی کدها و بهینه سازی آن و برخی دیگر نیز جهت رفع خطاهای نحوی و … باید رعایت شوند. در این بخش نیز قصد داریمتا به برخی از اشتباهات رایج در جاوا اسکریپت که ممکن است نتایج اشتباه به همراه داشته باشد، بپردازیم.

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

      چند مورد از اشتباهات رایج در جاوا اسکریپت وجود دارد که نتایجی تولید می کند که با نتیجه مورد انتظار شما متفاوت است.

      استفاده ی اشتباه از عملگرهای تخصیص

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

      دستور if زیر false را برمی گرداند چراکه مقدار x با ۱۰ برابر نیست :

      مثال : نتیجه ی اشتباه
      خودتان امتحان کنید »

      دستور if زیر اما نتیجه ی true برمی گرداند چراکه به x مقدار ۱۰ اختصاص می یابد:

      مثال : اختصاص مقدار 10 به x
      خودتان امتحان کنید »

      دستور if زیر نیز مقدار false را برمی گرداند چراکه ۰ برابر با false است:

      مثال : مقدار false
      خودتان امتحان کنید »

      نکته : یک عملگر تخصیص همیشه مقدار تخصیص یافته را باز می گرداند.

      نوع داده در مقایسه

      در مقایسه های منظم، نوع داده مهم نیست. این عبارت مقدار true برمی گراند:

      مثال : مقایسه ی اشتباه
      خودتان امتحان کنید »

      در مقایسه دقیق، نوع داده مهم است. این بیانیه اگر نادرست باز گردد:

      مثال :  مقایسه ی دقیق
      خودتان امتحان کنید »

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

      این سوئیچ مورد هشدار را نمایش می دهد:

      مثال : اشتباه رایج
      خودتان امتحان کنید »

      دستور switch زیر پیغام alert را نمایش می دهد :

      مثال :  مقدار سوئیچ اشتباه
      خودتان امتحان کنید »

      ترکیب و جمع دو نوع

      افزونه در مورد اضافه کردن اعداد است.

      ترکیب بندی در مورد اضافه کردن رشته ها است.

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

      به این دلیل، اضافه کردن یک عدد به عنوان یک عدد نتیجه دیگری از اضافه کردن یک عدد به عنوان یک رشته است:

      مثال : 
      خودتان امتحان کنید »

      هنگام اضافه کردن دو متغیر، پیش بینی نتایج ممکن است دشوار باشد.

      مثال : افزودن دو متغیر
      خودتان امتحان کنید »

      اشتباه در اعداد اعشاری

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

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

      مثال :  اشتباه اعشاری
      خودتان امتحان کنید »

      برای حل مشکل فوق، این کمک می کند تا ضرب و تقسیم انجام می شود:

      مثال : مشکل اعشاری زیر
      خودتان امتحان کنید »

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

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

      مثال : شکستن یک رشته در جاوا اسکریپت
      خودتان امتحان کنید »

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

      مثال : شکستن دستور در وسط رشته
      خودتان امتحان کنید »

      برای شکستن از وسط یک رشته باید از بک اسلش (/) استفاده کنید :

      مثال :  شکستن صحیح رشته ها
      خودتان امتحان کنید »

      قرار دادن اشتباه سمی کالون

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

      مثال : تنظیم اشتباه سمی کولون
      خودتان امتحان کنید »

      بستن خودکار انتهای دستورات

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

      مثال : عدم استفاده از سمی کالن
      خودتان امتحان کنید »

      مثال : استفاده از سمی کالن
      خودتان امتحان کنید »

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

      به همین دلیل، مثال ۳ همان نتایج را نیز به دست می آورد:

      مثال : شکستن خط دستور
      خودتان امتحان کنید »

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

      مثال : شکستن خط دوم دستور
      خودتان امتحان کنید »

      نتیجه این است که تابع فوق undefined را برمی گرداند!

      چرا؟ چون جاوا اسکریپت return را یک دستور جداگانه در نظر می گیرد.

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

      مثال :  تفسیر حالت فوق
      خودتان امتحان کنید »

      توضیحات فوق :

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

      مثال : 

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

      مثال : 

      اما اگر یک دستور کامل باشد (حداقل ها را داشته باشد) :

      مثال : 

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

      مثال : 

      این اتفاق می افتد زیرا بسته شدن (پایان دادن) اظهارات با semicolon در جاوا اسکریپت اختیاری است.

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

      نکته : پس هرگز سعی نکنید که یک خط دستور return را به دو خط یا بیشتر بشکنید.

      دسترسی به آرایه ها با نام گذاری index ها

      بسیاری از زبان های برنامه نویسی آرایه ها را با index ها نام گذاری می کنند.

      آرایه هایی که با نام شناخته می شوند آرایه های انجمنی (یا هش ها) نامیده می شوند.

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

      در جاوا اسکریپت، آرایه ها از index های عددی استفاده می کنند:

      مثال : نام گذاری آرایه در جاوا اسکریپت
      خودتان امتحان کنید »

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

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

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

      مثال : تعریف نادرست آرایه
      خودتان امتحان کنید »

      مشخص کردن پایان تعاریف با کاما

      کاما گذاشتن در تعریف آبجکت و آرایه در ECMAScript 5 قانونی است.

      مثال آبجکت-

      مثال : 

      مثال آرایه-

      مثال : 

      هشدار :

      اینترنت اکسپلورر ۸ خطا خواهد داد.

      JSON اجازه نمی دهد کاما ها در کنار هم قرار بگیرد.

      مثال JSON :

      مثال : 

      مثال : 

      نوع undefined در واقع NULL نیست

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

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

      این می تواند آن را کمی سخت تر کند اگر یک شیء خالی باشد.

      شما می توانید به صورت زیر تست کنید که اگر آبجکت وجود دارد آیا مقدار آن undefined است:

      مثال : تست مقدار undefined
      خودتان امتحان کنید »

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

      مثال-

      مثال : 

      برای حل مشکل فوق شما باید هم تست کنید که آبجکت NULL نباشد و هم تست کنید که undefined نباشد.

      اما این حالت نیز هنوز کامل نبوده و خطا دارد :

      مثال : 

      چرا که شما باید قبل از تست NULL نبودن ابتدا undefined نبودن را تست کنید:

      مثال :  حالت صحیح
      خودتان امتحان کنید »

      سطح block در Scope

      جاوا اسکریپت یک محدوده جدید برای هر بلوک کد ایجاد نمی کند.

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

      این کد مقدار  (i (10 را حتی خارج از بلوک حلقه نمایش می دهد:

      مثال : سطح block
      خودتان امتحان کنید »

      کلام آخر

      در هر یک از زبان های برنامه نویسی بی دقتی در برخی مسائل ساده خطاهای بزرگی را در برنامه ایجاد می کند که ممکن است زمان زیادی را صرف رفع آن کنید، از این رو در این بخش سعی کرده ایم تا برخی از اشتباهات رایج در جاوا اسکریپت و روش صحیح آن را ارائه دهیم تا شما بتوانید این اشتباهات را به حداقل برسانید.

      QR:  جلسه ۴۹ : اشتباهات رایج در جاوا اسکریپت
      به اشتراک بگذارید