JavaScript:بهترین تمرینات جاوااسکریپت

از ویکی کد
(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)
پرش به ناوبری پرش به جستجو

https://www.w3schools.com/js/js_best_practices.asp

JavaScript Best Practices

بهترین تمرینات جاوااسکریپت

Avoid global variables, avoid new, avoid ==, avoid eval()

از استفاده از متغیرهای کلی یا Global ، استفاده از کلمه new ، استفاده از کلمه ==  و متد eval() پرهیز کنید.

Avoid Global Variables

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

Minimize the use of global variables.

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

This includes all data types, objects, and functions.

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

Global variables and functions can be overwritten by other scripts.

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

Use local variables instead, and learn how to use closures.

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

Always Declare Local Variables

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

All variables used in a function should be declared as local variables.

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

Local variables must be declared with the var keyword or the let keyword, otherwise they will become global variables.

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

Strict mode does not allow undeclared variables.

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

Declarations on Top

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

It is a good coding practice to put all declarations at the top of each script or function.

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

This will:

این امر موجب :

·  Give cleaner code

کدنویسی تمیز تر

·  Provide a single place to look for local variables

فراهم سازی یک محل برای راحت تر پیدا کردن متغیرهای محلی

·  Make it easier to avoid unwanted (implied) global variables

ساده ترشدن جلوگیری از ایجاد متغیرهای کلی یا Global ناخواسته

·  Reduce the possibility of unwanted re-declarations

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

// Declare at the beginning

var firstName, lastName, price, discount, fullPrice;


// Use later

firstName = "John";

lastName = "Doe";


price = 19.90;

discount = 0.10;


fullPrice = price * 100 / discount;

This also goes for loop variables:

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

// Declare at the beginning

var i;


// Use later

for (i = 0; i < 5; i++) {

By default, JavaScript moves all declarations to the top (JavaScript Hoisting).

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

Initialize Variables

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

It is a good coding practice to initialize variables when you declare them.

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

This will:

این امر موجب :

·  Give cleaner code

کدنویسی تمیزتر

·  Provide a single place to initialize variables

فراهم سازی یک محل برای مقداردهی اولیه متغیرها

·  Avoid undefined values

جلوگیری از مقادیر undefined

// Declare and initiate at the beginning

var firstName = "",

lastName = "",

price = 0,

discount = 0,

fullPrice = 0,

myArray = [],

myObject = {};

Initializing variables provides an idea of the intended use (and intended data type).

مقداردهی اولیه متغیر ها موجب استفاده دقیق از نوع و داده مورد نظر می شود.

Never Declare Number, String, or Boolean Objects

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

Always treat numbers, strings, or booleans as primitive values. Not as objects.

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

Declaring these types as objects, slows down execution speed, and produces nasty side effects:

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

مثال

var x = "John";            

var y = new String("John");

(x === y) // is false because x is a string and y is an object.

Or even worse:

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

مثال

var x = new String("John");            

var y = new String("John");

(x == y) // is false because you cannot compare objects.

Don't Use new Object()

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

  • Use {} instead of new Object()

از {} به جای new Object() استفاده کنید

  • Use "" instead of new String()

از "" به جای new String() استفاده کنید

  • Use 0 instead of new Number()

از صفر به جای new Number() استفاده کنید.

  • Use false instead of new Boolean()

از False به جای new Boolean() استفاده کنید.

  • Use [] instead of new Array()

از [] به جای new Array() استفاده کنید

  • Use /()/ instead of new RegExp()

از /()/  به جای new RegExp() استفاده کنید.

  • Use function (){} instead of new Function()

از function() { }  به جای new Function() استفاده کنید.

مثال

var x1 = {};           // new object

var x2 = "";          // new primitive string

var x3 = 0;           // new primitive number

var x4 = false;       // new primitive boolean

var x5 = [];           // new array object

var x6 = /()/;         // new regexp object

Beware of Automatic Type Conversions

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

Beware that numbers can accidentally be converted to strings or NaN (Not a Number).

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

JavaScript is loosely typed. A variable can contain different data types, and a variable can change its data type:

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

مثال

var x = "Hello";     // typeof x is a string

x = 5;               // changes typeof x to a number

When doing mathematical operations, JavaScript can convert numbers to strings:

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

مثال

var x = 5 + 7;      // x.valueOf() is 12,  typeof x is a number

var x = 5 + "7";     // x.valueOf() is 57,  typeof x is a string

var x = "5" + 7;     // x.valueOf() is 57,  typeof x is a string

var x = 5 - 7;      // x.valueOf() is -2,  typeof x is a number

var x = 5 - "7";     // x.valueOf() is -2,  typeof x is a number

var x = "5" - 7;     // x.valueOf() is -2,  typeof x is a number

var x = 5 - "x";     // x.valueOf() is NaN, typeof x is a number

Subtracting a string from a string, does not generate an error but returns NaN (Not a Number):

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

مثال

"Hello" - "Dolly"    // returns NaN

Use === Comparison

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

The == comparison operator always converts (to matching types) before comparison.

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

The === operator forces comparison of values and type:

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

مثال

0 == "";       // true

1 == "1";       // true

1 == true;      // true


0 === "";       // false

1 === "1";      // false

1 === true;     // false

Use Parameter Defaults

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

If a function is called with a missing argument, the value of the missing argument is set to undefined.

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

Undefined values can break your code. It is a good habit to assign default values to arguments.

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

مثال

function myFunction(x, y) {

  if (y === undefined) {

   y = 0;

  }

}

ECMAScript 2015 allows default parameters in the function call:

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

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

Read more about function parameters and arguments at Function Parameters

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

End Your Switches with Defaults

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

Always end your switch statements with a default. Even if you think there is no need for it.

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

مثال

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";

}

Avoid Using eval()

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

The eval() function is used to run text as code. In almost all cases, it should not be necessary to use it.

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

Because it allows arbitrary code to be run, it also represents a security problem.

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