بهترین تمرینات

از ویکی‌کد
پرش به ناوبری پرش به جستجو
Main Page Tutorial
JavaScript-menu.png
موارد آموزشی
فرم‌ها در جاوا اسکریپت
اشیاء در جاوا اسکریپت
تابع در جاوا اسکریپت
HTML DOM در جاوا اسکریپت
Browser BOM در جاوا اسکریپت
AJAX در جاوا اسکریپت
JSON در جاوا اسکریپت
جی‌کوئری در برابر جاوا اسکریپت
مرجع جاوا اسکریپت

از استفادهٔ متغیرهای کلی (به انگلیسی: Global)، استفاده از new، استفاده از == و متد eval() پرهیز کنید. [۱]

از استفادهٔ متغیرهای کلی (به انگلیسی: Global) جلوگیری کنید

استفاده از متغیرهای global را به حداقل برسانید.

این امر شامل تمامی نوع داده‌ها، اشیاء و توابع می‌شود.

متغیرها و توابع‌های کلی می‌توانند توسط سایر اسکریپت‌ها بازنویسی شوند.

از متغیرهای محلی به جای متغیرهای کلی استفاده کنید و یاد بگیرید که چگونه از closureها یا Scopeهای مختلف استفاده کنید.

همیشه متغیرها را به صورت محلی تعریف کنید

تمامی متغیرهایی که در یک تابع استفاده می‌شوند می‌بایست به صورت متغیرهای محلی تعریف شوند.

متغیرهای محلی را می‌بایست با کلمه کلیدی var یا let تعریف کرد، در غیراینصورت آنها به عنوان متغیرهای کلی در نظر گرفته خواهند شد.

حالت سخت‌گیرانه اجازه استفاده از متغیرهای تعریف نشده را نمی‌دهد.

قرار دادن تعریف‌ها در بالای اسکریپت یا تابع

قراردادن تمامی تعاریف در بالای هر اسکریپت یا تابع تمرین خوبی است.

این امر موجب:

  • کدنویسی تمیزتر.
  • فراهم سازی یک محل برای راحت تر پیدا کردن متغیرهای محلی.
  • ساده ترشدن جلوگیری از ایجاد متغیرهای کلی ناخواسته.
  • کاهش امکان از دوباره تعریف شدن‌های ناخواسته.
 1 // Declare at the beginning
 2 var firstName, lastName, price, discount, fullPrice;
 3 
 4 // Use later
 5 firstName = "John";
 6 lastName = "Doe";
 7 
 8 price = 19.90;
 9 discount = 0.10;
10 
11 fullPrice = price * 100 / discount;

این امر همچنین برای متغیرهای حلقه‌ها نیز صدق می‌کند:

1 // Declare at the beginning
2 var i;
3 
4 // Use later
5 for (i = 0; i < 5; i++) {

به صورت پیشفرض، جاوا اسکریپت تمامی تعاریف را به بالای صفحه منتقل می‌کند. (ویژگی Hoisting در جاوا اسکریپت)

مقداردهی اولیه متغیرها

مقداردهی اولیه متغیرها در زمان تعریف آنها می‌تواند یک تمرین کدنویسی خوب باشد.

این امر موجب:

  • کدنویسی تمیزتر
  • فراهم سازی یک محل برای مقداردهی اولیه متغیرها
  • جلوگیری از مقادیر undefined
1 // Declare and initiate at the beginning
2 var firstName = "",
3 lastName = "",
4 price = 0,
5 discount = 0,
6 fullPrice = 0,
7 myArray = [],
8 myObject = {};
مقداردهی اولیه متغیرها موجب استفاده دقیق از نوع و داده مورد نظر می‌شود.

هرگز اعداد، رشته های متنی، مقادیر بولین یا منطقی را به صورت شیء تعریف نکنید

همیشه اعداد، رشته‌های متنی یا مقادیر منطقی را به صورت داده‌های primitive بشناسید نه به صورت یک شی.

تعریف این نوع داده‌ها موجب کاهش سرعت اجرای کد شده و ممکن است آثار ناخواسته ای داشته باشد:

مثال

1 var x = "John";             
2 var y = new String("John");
3 (x === y) // is false because x is a string and y is an object.


مشاهدهٔ نتیجه


و این امر می‌تواند بدترهم باشد:

مثال

1 var x = new String("John");             
2 var y = new String("John");
3 (x == y) // is false because you cannot compare objects.


مشاهدهٔ نتیجه


از new Object() استفاده نکنید

  • از { } به جای new Object() استفاده کنید
  • از " " به جای new String() استفاده کنید
  • از 0 به جای new Number() استفاده کنید
  • از false به جای new Boolean() استفاده کنید
  • از به جای new Array() استفاده کنید
  • از /( )/ به جای new RegExp() استفاده کنید
  • از function (){} به جای new Function() استفاده کنید

مثال

1 var x1 = {};           // new object
2 var x2 = "";           // new primitive string
3 var x3 = 0;            // new primitive number
4 var x4 = false;        // new primitive boolean
5 var x5 = [];           // new array object
6 var x6 = /()/;         // new regexp object
7 var x7 = function(){}; // new function object


مشاهدهٔ نتیجه


از تبدیل داده های خودکار، اطلاع داشته باشید

اطلاع داشته باشید که اعداد ممکن است به صورت تصادفی به رشته‌های متنی یا NaN (یک عدد نیست) تبدیل شوند.

جاوا اسکریپت آزادانه طراحی شده‌است. یک متغیر می‌تواند نوع داده‌های مختلفی را شامل شود و یک متغیر می‌تواند نوع داده آن را عوض کند:

مثال

1 var x = "Hello";     // typeof x is a string
2 x = 5;               // changes typeof x to a number


مشاهدهٔ نتیجه


هنگام انجام عملیات‌های ریاضی، جاوا اسکریپت می‌تواند اعداد را به رشته‌های متنی تبدیل کند:

مثال

1 var x = 5 + 7;       // x.valueOf() is 12,  typeof x is a number
2 var x = 5 + "7";     // x.valueOf() is 57,  typeof x is a string
3 var x = "5" + 7;     // x.valueOf() is 57,  typeof x is a string
4 var x = 5 - 7;       // x.valueOf() is -2,  typeof x is a number
5 var x = 5 - "7";     // x.valueOf() is -2,  typeof x is a number
6 var x = "5" - 7;     // x.valueOf() is -2,  typeof x is a number
7 var x = 5 - "x";     // x.valueOf() is NaN, typeof x is a number


مشاهدهٔ نتیجه


تفریق یک رشته از یک رشته دیگر موجب بروز خطا نمی‌شود اما مقدار NaN یا (یک عدد نیست) را برمی‌گرداند:

مثال

"Hello" - "Dolly"    // returns NaN


مشاهدهٔ نتیجه


استفاده از عملگر مقایسه ای ===

عملگر == همیشه قبل از مقایسه به نوع‌های سازگار تبدیل می‌شود.

عملگر === بررسی برابری مقدار و نوع را با یک دیگر و به صورت همزمان انجام می‌دهد:

مثال

1 0 == "";        // true
2 1 == "1";       // true
3 1 == true;      // true
4 
5 0 === "";       // false
6 1 === "1";      // false
7 1 === true;     // false


مشاهدهٔ نتیجه


استفاده از پارامترهای پیش فرض

اگر یک تابع با آرگومان یا پارامتر فراموش شده فراخوانی شود، مقدار پارامتر فراموش شده برابر با undefined می‌شود.

مقادیر undefined می‌توانند کدهای شما را خراب کنند. عادت خوبی است که برای آرگومان‌ها مقدار پیش‌فرض در نظر بگیرید.

مثال

1 function myFunction(x, y) {
2   if (y === undefined) {
3     y = 0;
4   }
5 }


مشاهدهٔ نتیجه


نسخه ECMAScript 2015 جاوا اسکریپت اجازه استفاده از مقدار پیشفرض برای آرگومان تابع را در هنگام فراخوانی آن می‌دهد:

function (a=1, b=1) { /*function code*/ }

می‌توانید مطالب بیشتری را در مورد پارامترها و آرگومان‌های تابع در فصل پارامترهای تابع بخوانید.

دستورات Switch خود را با بلاک Default پایان دهید

همیشه دستورات switch خود را با بلاک default به پایان ببرید. حتی اگر فکر می‌کنید که نیازی به آن نیست.

مثال

 1 switch (new Date().getDay()) {
 2   case 0:
 3     day = "Sunday";
 4     break;
 5   case 1:
 6     day = "Monday";
 7     break;
 8   case 2:
 9     day = "Tuesday";
10     break;
11   case 3:
12     day = "Wednesday";
13     break;
14   case 4:
15     day = "Thursday";
16     break;
17   case 5:
18     day = "Friday";
19     break;
20   case 6:
21     day = "Saturday";
22     break;
23   default:
24     day = "Unknown";
25 }


مشاهدهٔ نتیجه


از استفادهٔ تابع Avoid() جلوگیری کنید

متد eval() معمولاً برای اجرای متن‌ها به صورت کد استفاده می‌شود. معمولاً در تمامی موارد، ضرورتی برای استفاده از آن وجود ندارد.

چرا که این متد اجازه می‌دهد کد به صورت خودسرانه اجرا شود و همچنین این تابع مشکل امنیتی نیز دارد.


منابع آموزشی