JavaScript Eng Yaxshi Usullar (Best Practices)
Global o'zgaruvchilardan saqlaning, new dan saqlaning, == dan saqlaning, eval() dan saqlaning.
Global o'zgaruvchilardan saqlaning
Global o'zgaruvchilardan foydalanishni minimallang. Bu barcha ma'lumot turlari, obyektlar va funksiyalarni o'z ichiga oladi. Global o'zgaruvchilar va funksiyalar boshqa skriptlar tomonidan qayta yozilishi mumkin. Buning o'rniga mahalliy o'zgaruvchilardan foydalaning va yopilmalar (closures) ishlatishni o'rganing.
Har doim mahalliy o'zgaruvchilarni e'lon qiling
Funksiyada ishlatiladigan barcha o'zgaruvchilar mahalliy o'zgaruvchilar sifatida e'lon qilinishi kerak. Mahalliy o'zgaruvchilar var, let yoki const kalit so'zi bilan e'lon qilinishi shart, aks holda ular global o'zgaruvchilarga aylanadi.
Eslatma
Qat'iy rejim (strict mode) e'lon qilinmagan o'zgaruvchilarga ruxsat bermaydi.
E'lonlarni yuqoriga qo'ying
Barcha e'lonlarni har bir skript yoki funksiyaning yuqorisiga qo'yish yaxshi amaliyotdir. Bu:
- Toza kod beradi
- Mahalliy o'zgaruvchilarni qidirish uchun bitta joy beradi
- Keraksiz (nazarda tutilgan) global o'zgaruvchilardan qochishni osonlashtiradi
- Keraksiz qayta e'lonlar ehtimolini kamaytiradi
// Boshida e'lon qiling
let firstName, lastName, price, discount, fullPrice;
// Keyinroq ishlating
firstName = "John";
lastName = "Doe";
price = 19.90;
discount = 0.10;
fullPrice = price - discount;Bu sikl o'zgaruvchilariga ham tegishli:
for (let i = 0; i < 5; i++) {O'zgaruvchilarni initsializatsiya qiling
O'zgaruvchilarni e'lon qilganingizda initsializatsiya qilish yaxshi amaliyotdir. Bu:
- Toza kod beradi
- O'zgaruvchilarni initsializatsiya qilish uchun bitta joy beradi
- Undefined qiymatlardan qochadi
// Boshida e'lon va initsializatsiya qiling
let firstName = "";
let lastName = "";
let price = 0;
let discount = 0;
let fullPrice = 0;
const myArray = [];
const myObject = {};Eslatma
O'zgaruvchilarni initsializatsiya qilish mo'ljallangan foydalanish (va mo'ljallangan ma'lumot turi) haqida tasavvur beradi.
JavaScript o'zgaruvchilarini qayta e'lon qilish
var bilan e'lon qilingan JavaScript o'zgaruvchisini qayta e'lon qilsangiz, u o'z qiymatini yo'qotmaydi:
// Tavsiya etilmaydi
var carName = "Volvo";
var carName;let yoki const bilan e'lon qilingan o'zgaruvchini qayta e'lon qilish mumkin emas:
// Bu ishlamaydi
let carName = "Volvo";
let carName;
// Bu ham ishlamaydi
const carName = "Volvo";
const carName;Obyektlarni const bilan e'lon qiling
Obyektlarni const bilan e'lon qilish turni tasodifiy o'zgartirishning oldini oladi:
let car = {type:"Fiat", model:"500", color:"white"};
car = "Fiat"; // Obyektni satrga o'zgartiradi
const car = {type:"Fiat", model:"500", color:"white"};
car = "Fiat"; // Mumkin emasMassivlarni const bilan e'lon qiling
Massivlarni const bilan e'lon qilish turni tasodifiy o'zgartirishning oldini oladi:
let cars = ["Saab", "Volvo", "BMW"];
cars = 3; // Massivni raqamga o'zgartiradi
const cars = ["Saab", "Volvo", "BMW"];
cars = 3; // Mumkin emasnew Object() ishlatmang
new String()o'rniga""ishlatingnew Number()o'rniga0ishlatingnew Boolean()o'rnigafalseishlatingnew Object()o'rniga{}ishlatingnew Array()o'rniga[]ishlatingnew RegExp()o'rniga/()/ishlatingnew Function()o'rnigafunction (){}ishlating
let x1 = ""; // yangi primitiv satr
let x2 = 0; // yangi primitiv raqam
let x3 = false; // yangi primitiv boolean
const x4 = {}; // yangi obyekt
const x5 = []; // yangi massiv obyekti
const x6 = /()/; // yangi regexp obyekti
const x7 = function(){}; // yangi funksiya obyektiAvtomatik tur o'zgartirishdan ehtiyot bo'ling
JavaScript erkin tiplangan tildir. O'zgaruvchi barcha ma'lumot turlarini saqlashi va ma'lumot turini o'zgartirishi mumkin:
let x = "Hello"; // typeof x = string
x = 5; // typeof x = numberRaqamlar tasodifiy satrlarga yoki NaN ga aylanishi mumkin:
let x = 5 + 7; // x = 12, typeof x = number
let x = 5 + "7"; // x = "57", typeof x = string
let x = "5" + 7; // x = "57", typeof x = string
let x = 5 - 7; // x = -2, typeof x = number
let x = 5 - "7"; // x = -2, typeof x = number
let x = "5" - 7; // x = -2, typeof x = number
let x = 5 - "x"; // x = NaN, typeof x = numberSatrdan satrni ayirish xato yaratmaydi, lekin NaN qaytaradi:
"Hello" - "Dolly" // NaN qaytaradi=== taqqoslashdan foydalaning
== taqqoslash operatori taqqoslashdan oldin har doim (mos turlarga) aylantiradi. === operatori qiymat va turni taqqoslashga majburlaydi:
0 == ""; // true
1 == "1"; // true
1 == true; // true
0 === ""; // false
1 === "1"; // false
1 === true; // falseParametr standart qiymatlaridan foydalaning
Funksiya yetishmayotgan argument bilan chaqirilsa, yetishmayotgan argumentning qiymati undefined ga o'rnatiladi. Standart qiymatlar berish yaxshi odat:
function myFunction(x, y) {
if (y === undefined) {
y = 0;
}
}ECMAScript 2015 funksiya ta'rifida standart parametrlarga ruxsat beradi:
function (a=1, b=1) { /*funksiya kodi*/ }Switch-larni default bilan tugatang
switch bayonotlarini har doim default bilan tugatang, hatto kerak emas deb o'ylasangiz ham:
switch (new Date().getDay()) {
case 0:
day = "Sunday";
break;
case 1:
day = "Monday";
break;
// ...
default:
day = "Unknown";
}Number, String va Boolean-ni obyekt sifatida ishlatmang
Raqamlar, satrlar yoki boolean-larni har doim primitiv qiymatlar sifatida ko'ring, obyektlar sifatida emas:
let x = "John";
let y = new String("John");
(x === y) // false — chunki x satr, y esa obyekt
let x = new String("John");
let y = new String("John");
(x == y) // false — chunki obyektlarni taqqoslab bo'lmaydieval() ishlatmang
eval() funksiyasi matnni kod sifatida bajarish uchun ishlatiladi. Deyarli barcha hollarda uni ishlatish shart emas. U o'zboshimchalik bilan kodni bajarishga ruxsat berganligi uchun xavfsizlik muammosini ham ifodalaydi.
