با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، در بخش قبلی مرور کلی بر قواعد و اصول کدنویسی و نام گذاری صحیح در جاوا اسکریپت داشتیم، در این بخش نیز به نحوی مباحث بخش قبلی را ادامه داده و به بررسی چند مورد مهم از توصیه های کدنویسی در جاوا اسکریپت می پردازیم، رعایت کردن این توصیه ها نیز از پیچیده شدن کدهای شما جلوگیری کرده و روند کد نویسی را بهبود می بخشد، در ادامه ی این بخش جهت بررسی توصیه های کدنویسی در جاوا اسکریپت با ما همراه باشید.
در ادامه ی این مبحث شما را با چند مورد از توصیه های کدنویسی در جاوا اسکریپت که ساده اما مهم هستند آشنا می کنیم.
در این مبحث به شما خواهیم آموخت که بهتر است از متغیرهای عمومی، کلمه کلیدی new، عملگر == و تابع ()eval اجتناب کنید.
به حداقل رساندن استفاده از متغیرهای عمومی توصیه می شود.
که البته این شامل انواع داده ها، اشیاء و توابع می شود.
متغیرها و توابع عمومی را می توان با استفاده از اسکریپت های دیگر تغییر داد.
سعی کنید بیشتر از متغیرهای محلی استفاده کنید.
تمام متغیرهایی را که داخل توابع استفاده می کنید، به صورت محلی (داخل همان تابع) تعریف کنید.
متغیرهای محلی را باید با کلمه ی کلیدی var تعریف کرد، در غیر این صورت آن ها به عنوان متغیرهای عمومی شناخته می شوند.
نکته : البته در حالت Strict اجازه ی استفاده از متغیرهایی که هنوز تعریف نشده اند را ندارید.
این خوب است که سعی کنید که تمام تعاریف خود را در بالای اسکریپت یا تابع قرار دهید.
این به این خاطر است :
1 2 3 4 5 6 7 8 9 10 11 | // 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; |
این نیز برای متغیرهای حلقه ای است:
1 2 3 4 5 | // Declare at the beginning var i; // Use later for (i = 0; i < 5; i++) { |
البته در حالت پیش فرض جاوا اسکریپت تمام تعاریف را به بالا می برد.
این خوب است که در زمان تعریف متغیر ها یک مقدار اولیه به آن های اختصاص دهید.
این به این خاطر است:
1 2 3 4 5 6 7 8 | // Declare and initiate at the beginning var firstName = "", lastName = "", price = 0, discount = 0, fullPrice = 0, myArray = [], myObject = {}; |
نکته : متغیرهای ابتدایی ایده ای از استفاده در نظر گرفته شده (و نوع داده مورد نظر) را ارائه می دهد.
همیشه اعداد، رشته ها یا boolean ها را به عنوان مقادیر اولیه تکرار کنید. نه به عنوان آبجکت.
اعلام این نوع به عنوان آبجکت، سرعت اجرا را کاهش داده و عوارض جانبی تند و زننده ای را ایجاد می کند:
1 2 3 | var x = "John"; var y = new String("John"); (x === y) // is false because x is a string and y is an object. |
و یا حتی بدتر :
1 2 3 | var x = new String("John"); var y = new String("John"); (x == y) // is false because you cannot compare objects. |
1 2 3 4 5 6 7 | 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 (غیر عددی) تبدیل شوند.
در جاوا اسکریپت یک متغیر می تواند نوع داده های مختلفی داشته باشد و یک متغیر می تواند نوع داده خود را تغییر دهد:
1 2 | var x = "Hello"; // typeof x is a string x = 5; // changes typeof x to a number |
هنگام انجام عملیات ریاضی، جاوا اسکریپت می تواند اعداد را به رشته تبدیل کند:
1 2 3 4 5 6 7 | 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 (غیر عددی) را نشان می دهد:
عملگر مقایسه ای == همیشه قبل از مقایسه (برای تطبیق انواع داده ) تبدیل نوع می کند.
اما عملگر === مقایسه را روی هر دو مورد مقدار و نوع انجام می دهد :
1 2 3 4 5 6 7 | 0 == ""; // true 1 == "1"; // true 1 == true; // true 0 === ""; // false 1 === "1"; // false 1 === true; // false |
اگر یک تابع با پارامتر اشتباه فراخوانی شود، مقدار پارامتر آن تابع به صورت undefined مشخص می شود.
مقادیر Undefined می تواند کد را دچار مشکل کنند، پس بهتر است همیشه یک مقدار اولیه به پارامترها اختصاص بدهید.
1 2 3 4 5 | function myFunction(x, y) { if (y === undefined) { y = 0; } } |
ECMAScript 2015 اجازه می دهد پارامترهای پیش فرض در تابع فراخوانی شوند:
1 | function (a=1, b=1) { // function code } |
در پایان switch ها حتما از default استفاده کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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 برای اجرای text به عنوان کد استفاده می شود. تقریبا در همه موارد نباید از آن استفاده کرد.
از آنجا که اجازه می دهد تا کد دلخواه اجرا شود، این مسئله یک مشکل امنیتی را نشان می دهد.
در این بخش به ارائه ی چند مورد از توصیه های کدنویسی در جاوا اسکریپت پرداختیم که در عین سادگی اما بسیاری از مشکلات احتمالی و حتمی کدهای برنامه ی شما را حل می کنند.