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

از ویکی کد
پرش به ناوبری پرش به جستجو
دورهٔ آموزشی جاوااسکریپت
Javascript.jpg
Tutorial
۱آموزش جاوااسکریپت
۲مقدمه‌ای بر جاوااسکریپت
۳JavaScript:قوانین و اصول اولیه زبان جاوااسکریپت
۴JavaScript:خروجی جاوااسکریپت
۵JavaScript:عبارت‌ها در جاوااسکریپت
۶JavaScript:شیوهٔ نوشتن (Syntax) عبارات یا دستورات در جاوااسکریپت
۷JavaScript:نظرات یا کامنت‌ها (Comments) در جاوااسکریپت
۸JavaScript:متغیرها در جاوااسکریپت
۹JavaScript:عملگرهای جاوااسکریپت
۱۰JavaScript:عملگرهای ریاضی در جاوااسکریپت
۱۱JavaScript:عملگرهای مقداردهی در جاوااسکریپت
۱۲JavaScript:انواع داده‌ها در جاوااسکریپت
۱۳JavaScript:توابع در جاوااسکریپت
۱۴JavaScript:اشیاء (object) در جاوااسکریپت
۱۵JavaScript:رویدادها در جاوااسکریپت
۱۶JavaScript:رشته‌های متنی (string) در جاوااسکریپت
۱۷JavaScript:متدهای نوع داده متنی یا رشته‌ای در جاوااسکریپت
۱۸JavaScript:اعداد در جاوااسکریپت
۱۹JavaScript:متدهای داده‌های عددی در جاوااسکریپت
۲۰JavaScript:آرایه‌ها در جاوااسکریپت
۲۱JavaScript:متدهای آرایه در جاوااسکریپت
۲۲JavaScript:مرتب‌سازی آرایه‌ها در جاوااسکریپت
۲۳JavaScript:متدهای پیمایش آرایه در جاوااسکریپت
۲۴JavaScript:اشیاء تاریخ و زمان در جاوااسکریپت
۲۵JavaScript:فرمت‌های تاریخ و زمان در جاوااسکریپت
۲۶JavaScript:متدهای دریافت تاریخ و زمان در جاوااسکریپت
۲۷JavaScript:متدهای تنظیم زمان و تاریخ در جاوااسکریپت
۲۸JavaScript:شی ریاضی (Math) در جاوااسکریپت
۲۹JavaScript:ایجاد عدد تصادفی در جاوااسکریپت
۳۰JavaScript:مقادیر بولین (Booleans) در جاوااسکریپت
۳۱JavaScript:عملگرهای منطقی و مقایسه‌ای در جاوااسکریپت
۳۲JavaScript:ساختار if else و else if در جاوااسکریپت
۳۳JavaScript:تکه کد Switch در جاوا اسکریپت
۳۴JavaScript:حلقه For در جاوااسکریپت
۳۵JavaScript:حلقه While در جاوااسکریپت
۳۶JavaScript:کلمات کلیدی Break و Continue در جاوااسکریپت
۳۷JavaScript:تبدیل نوع داده‌ها در جاوااسکریپت
۳۸JavaScript:عملیات‌های بیتی در جاوااسکریپت
۳۹JavaScript:عبارات با قاعده در جاوااسکریپت
۴۰JavaScript:خطاها در جاوااسکریپت - رخ دادن خطا و رفع آن
۴۱JavaScript:Scope در جاوااسکریپت
۴۲JavaScript:Hoisting یا جا به جایی کدها در جاوااسکریپت
۴۳JavaScript:استفاده از مد یا حالت سخت‌گیرانه (use strict) در جاوااسکریپت
۴۴JavaScript:کلمه کلیدی This در جاوااسکریپت
۴۵JavaScript:کلمه کلیدی Let در جاوااسکریپت
۴۶JavaScript:ثابت‌ها در جاوااسکریپت
۴۷JavaScript:تعریف توابع به صورت پیکان
۴۸JavaScript:کلاس‌ها در جاوااسکریپت
۴۹JavaScript:اشکال‌زدایی در جاوااسکریپت
۵۰JavaScript:راهنمای استایل و استانداردهای کدنویسی در جاوااسکریپت
۵۱JavaScript:بهترین تمرینات جاوااسکریپت
۵۲JavaScript:اشتباهات رایج در برنامه‌نویسی جاوااسکریپت
۵۳JavaScript:کارایی در جاوااسکریپت
۵۴JavaScript:کلمات رزرو شده در جاوااسکریپت
۵۵JavaScript:ورژن‌های جاوااسکریپت
۵۶JavaScript:ECMAScript 5 - JavaScript 5
۵۷JavaScript:ECMAScript 6 - ECMAScript 2015
۵۸JavaScript:جیسون (JSON) در جاوااسکریپت
---

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

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

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

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

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

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

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

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

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


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

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

این امر موجب:

  • کدنویسی تمیزتر.
  • فراهم سازی یک محل برای راحت تر پیدا کردن متغیرهای محلی.
  • ساده ترشدن جلوگیری از ایجاد متغیرهای کلی ناخواسته.
  • کاهش امکان از دوباره تعریف شدن‌های ناخواسته.
// 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;

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

// Declare at the beginning
var i;

// Use later
for (i = 0; i < 5; i++) {


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

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

این امر موجب:

  • کدنویسی تمیزتر.
  • فراهم سازی یک محل برای مقداردهی اولیه متغیرها.
  • جلوگیری از مقادیر undefined
// Declare and initiate at the beginning
var firstName = "",
lastName = "",
price = 0,
discount = 0,
fullPrice = 0,
myArray = [],
myObject = {};


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

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

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

مثال

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

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

مثال

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

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

  • از{} {} به جایnew Object()استفاده کنید.
  • از "" به جایnew String()استفاده کنید.
  • از0به جایnew Number()استفاده کنید.
  • ازfalse False به جایnew Boolean()استفاده کنید.
  • از[]به جایnew Array()استفاده کنید
  • از /()/به جایnew RegExp()استفاده کنید.
  • از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
var x7 = function(){}; // new function object

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

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

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

مثال

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

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

مثال

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

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

مثال

"Hello" - "Dolly"    // returns NaN

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

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

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

مثال

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

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

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

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

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

مثال

function myFunction(x, y) {
  if (y === undefined) {
    y = 0;
  }
}

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

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

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

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

همیشه دستورات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 جلوگیری کنید

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

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

منابع آموزشی