بهترین عملکرد JavaScript

از متغیرهای جهانی وnewو===وeval()

از متغیرهای جهانی جلوگیری کنید

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

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

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

از متغیرهای محلی استفاده کنید و یاد بگیرید که چگونه از آن‌ها استفاده کنیدبستگی

بستگی

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

متغیرهای محلیلازم استاز طریق var با استفاده از کلمات کلیدی تعریف شوند، در غیر این صورت به متغیرهای جهانی تبدیل می‌شوند.

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

در بالا تعریف شود

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

مزایای این کار این است که:

  • کد تمیزتری به دست می‌آید
  • مکان خوبی برای جستجوی متغیرهای محلی فراهم می‌کند
  • جلوگیری از استفاده از متغیرهای جهانی غیرضروری
  • کاهش احتمال تعریف مجدد متغیرهای غیرضروری
// در بالا تعریف شود
var firstName, lastName, price, discount, fullPrice;
// استفاده بعدی
firstName = "Bill";
lastName = "Gates";
price = 19.90;
discount = 0.10;
fullPrice = price * 100 / discount;

همچنین می‌توان از آن برای متغیرهای حلقه استفاده کرد:

// در بالا تعریف شود
var i;
// استفاده بعدی
for (i = 0; i < 5; i++)  {

به صورت پیش‌فرض، JavaScript تمامی متغیرها را به بالای کد می‌برد (hoisting JavaScript).

تعریف متغیرها

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

مزایای این کار این است که:

  • کد تمیزتر
  • در مکان‌های جداگانه متغیرها را تعریف و تعریف اولیه کنید
  • از ارزش‌های تعریف نشده خودداری کنید
// در ابتدای کد، تعریف و تعریف اولیه انجام شود
var firstName = "",
    lastName  = "",
    price = 0,
    discount = 0,
    fullPrice  = 0,
    myArray = [],
    myObject = {};

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

لطفاً از تعریف اعداد، رشته‌ها یا Boolean‌ها به عنوان اشیاء خودداری کنید

لطفاً همیشه اعداد، رشته‌ها یا Boolean‌ها را به عنوان ارزش‌های اولیه در نظر بگیرید، نه اشیاء.

اگر این نوع‌ها را به عنوان اشیاء تعریف کنید، سرعت اجرا را کاهش می‌دهند و اثرات بدی ایجاد می‌کنند:

مثال

var x = "Bill";             
var y = new String("Bill");
(x === y) // نتیجه false است، زیرا x یک رشته است و y یک شیء است.

سعی کنید خودتان انجام دهید

یا حتی بدتر:

مثال

var x = new String("Bill");             
var y = new String("Bill");
(x == y) // نتیجه false است، زیرا نمی‌توانید اشیاء را مقایسه کنید.

سعی کنید خودتان انجام دهید

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

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

مثال

var x1 = {};           // اشیای جدیدی از نوع Object
var x2 = "";           // ارزش اولیه نوع String
var x3 = 0;            // ارزش اولیه نوع Number
var x4 = false;        // ارزش اولیه نوع Boolean
var x5 = [];           // اشیای جدیدی از نوع Array
var x6 = /()/;         // اشیای جدیدی از نوع RegExp
var x7 = function(){}; // اشیای جدیدی از نوع Function

سعی کنید خودتان انجام دهید

آگاهی از تبدیل خودکار نوع داده‌ها

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

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

مثال

var x = "Hello";     // typeof x به رشته است
x = 5;               // typeof x را به عدد تغییر دهید

سعی کنید خودتان انجام دهید

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

مثال

var x = 5 + 7;       // x.valueOf() به 12، typeof x به عدد است
var x = 5 + "7";     // x.valueOf() به 57، typeof x به رشته است
var x = "5" + 7;     // x.valueOf() به 57، typeof x به رشته است
var x = 5 - 7;       // x.valueOf() به -2، typeof x به عدد است
var x = 5 - "7";     // x.valueOf() به -2، typeof x به عدد است
var x = "5" - 7;     // x.valueOf() به -2، typeof x به عدد است
var x = 5 - "x";     // x.valueOf() به NaN، typeof x به عدد است

سعی کنید خودتان انجام دهید

کاهش دادن دو رشته، خطایی ایجاد نمی‌کند و به جای آن NaN:(عدد نیست):

مثال

"Hello" - "Dolly"    // بازمی‌گردد به NaN

سعی کنید خودتان انجام دهید

برای مقایسه از === استفاده کنید

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

=== عملگرها به طور اجباری مقایسه‌ای بین مقدار و نوع انجام می‌دهند:

مثال

0 == "";        // true
1 == "1";       // true
1 == true;      // true
0 === "";       // false
1 === "1";      // false
1 === true;     // false

سعی کنید خودتان انجام دهید

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

اگر یک پارامتر در زمان فراخوانی دستور العمل از دست رفته باشد، مقدار این پارامتر از دست رفته به مقدار undefined

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

مثال

دستور العمل myFunction(x, y) {
    اگر (y === undefined) {
        y = 0;
    }
}

سعی کنید خودتان انجام دهید

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

برای پایان دادن به switch از default استفاده کنید

لطفاً از default برای پایان دادن به switch جمله. حتی اگر فکر کنید که این لازم نیست.

مثال

switch (new Date().getDay()) {
    case 0:
        day = "Sunday";
        break;
    case 1:
        day = "Monday";
         break;
    case 2:
        day = "Tuesday";
         break;
    case 3:
        day = "Wednesday";
         break;
    case 4:
        day = "Thursday";
         break;
    case 5:
        day = "Friday";
         break;
    case 6:
        day = "Saturday";
         break;
    default:
        day = "Unknown";
} 

سعی کنید خودتان انجام دهید

از استفاده از eval() خودداری کنید

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

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