بهترین عملکرد JavaScript
- صفحه قبلی راهنمای استایل JS
- صفحه بعدی خطاهای JS
از متغیرهای جهانی و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()
توابع برای تبدیل متن به کد استفاده میشوند. در بیشتر موارد، استفاده از آن ضروری نیست.
به دلیل اینکه مجاز به اجرای هرگونه کد است، این همچنین به این معنی است که مشکلات امنیتی نیز وجود دارد.
- صفحه قبلی راهنمای استایل JS
- صفحه بعدی خطاهای JS