از استفاده مواردnew , == و eval() اجتناب كنيد.
استفاده از متغير هاي سراسر در حد اقل باشد .اين مورد شامل همه نوع دادها ،اشياء و توابع است.
متغير ها و توابع سراسري را ميتوان در اسكريپت هاي ديگر بازنويسي كرد .از متغيرهاي محلي بجاي آنها بكارببريد و روش استفاده آنها را بدانيد.
همه متغير هائيكه در يك تابع استفاده ميكنيد، حداكثر محلي تعريف شوند .متغير هاي محلي بايد varتعريف شوند، در غير اينصورت با let , const متغيرهاي سراسري هستند.
در حالت سختگيرانه اجازه تعريف دوباره متغير را نداريد.
يك روش خوب كد نويسي اينستكه دستورتعاريف در بالاي اسكريپت يا تابع قرار گيرد .اين داراي مزيت هاي زيرند:
// Declare at the beginning let firstName, lastName, price, discount, fullPrice; // Use later firstName = "John"; lastName = "Doe"; price = 19.90; discount = 0.10; fullPrice = price - discount;
اين مورد براي متغير هاي حلقه هم صادق است.
for (let i = 0; i < 5; i++) {
بهترين روش براي تنظيم مقدار متغيرها در تعاريف آنهاست .داراي مزيت هاي زيراست:
// Declare and initiate at the beginning let firstName = ""; let lastName = ""; let price = 0; let discount = 0; let fullPrice = 0, const myArray = []; const myObject = {};
تنظيم مقادير اوليه متغيرها انديشه به استفاده ونوع داده ها را ايجاد ميكند.
تعريف اشياء باconst از هرگونه حادثه تغييرنوع جلوگيري ميكند .
مثال ـ مورد اول تغيير نوع امكان پذير و در دومي امكان پذير نيست
let car = {type:"Fiat", model:"500", color:"white"}; car = "Fiat"; // Changes object to string
const car = {type:"Fiat", model:"500", color:"white"}; car = "Fiat"; // Not possible
تعريف آرايه باconst از هرگونه حادثه تغييرنوع جلوگيري ميكند.
مثال ـ مورد اول تغيير نوع انجام ميشود، مورد دوم خير
let cars = ["Saab", "Volvo", "BMW"]; cars = 3; // Changes array to number
const cars = ["Saab", "Volvo", "BMW"]; cars = 3; // Not possible
بجاي آن ازموارد زير استفاده كنيد:
مثال
let x1 = ""; // new primitive string let x2 = 0; // new primitive number let x3 = false; // new primitive boolean const x4 = {}; // new object const x5 = []; // new array object const x6 = /()/; // new regexp object const x7 = function(){}; // new function object
جاوااسكريپت نوع داده را رها كرده است .يك متغير ميتواند شامل تمام انواع داده باشد .يك متغير ميتواند نوع داده اي خودرا تغيير دهد.
مثال ـ تغيير نوع داده متغير
let x = "Hello"; // typeof x is a string x = 5;
دوري از اعداديكه اتفاقي به رشته ياNaN تبديل ميشوند .هنگاميكه عمل محاسباتي انجام ميدهيد، جاوااسكريپت ميتواند اعداد را به رشته تبديل كند..
مثال ـ تبديل ناخواسته عدد به رشته
let x = 5 + 7; // x.valueOf() is 12, typeof x is a number let x = 5 + "7"; // x.valueOf() is 57, typeof x is a string let x = "5" + 7; // x.valueOf() is 57, typeof x is a string let x = 5 - 7; // x.valueOf() is -2, typeof x is a number let x = 5 - "7"; // x.valueOf() is -2, typeof x is a number let x = "5" - 7; // x.valueOf() is -2, typeof x is a number let 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;
اگر تابعي با آرگومان يا پارامتر اشتباه فراخوان شود، مقدار پارامتر اشتباه نامشخص (undefinded)در نظر گرفته ميشود .مقدار فوق ممكن كد را متوقف (breack)كند .عادت خوبي است كه اگر خودتان پيش فرض مناسب را تنظيم نمائيد .
مثال ـ تنظيم پيش فرض تابع
function myFunction(x, y) { if (y === undefined) { y = 0; } }
درECMAScrit 2015 اجازه تعريف پيش فرض در آرگومان تابع شده است .اين كار در تعريف تابع تنظيم ميشود.
مثال ـ تنظيم پيش فرض آرگومان تابع
function (a=1, b=1) { /*function code*/ }
هميشه در پايان دستور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";
}
هميشه اعداد، رشته ها و بولين را بعنوان مقادير دنبال نمائيد، نه يعنوان اشياء .تعريف آنان بصوت شئ باعث كاهش سرعت اجرا و ايجاد آثارنامطلوب ميكند.
مثال ـ نيتجه بد رشته بعنوان شئ
let x = "John"; let y = new String("John"); (x === y) // is false because x is a string and y is an object.
مثال ـ اتفاق بدتر
let x = new String("John"); let y = new String("John"); (x == y) // is false because you cannot compare objects.
با تابعeval( ) ميتوان متني(text) را بعنوان كد اجرا نمود .در بيشتر موارد اين كار ضروري نيست وميتوان ازطريق معمول انجام داد.