O'zgaruvchilarni e'lon qilish: let, const, var
JavaScript o'zgaruvchini e'lon qilishning uchta usulini beradi, ammo zamonaviy kodda sizga faqat ikkitasi kerak bo'ladi.
const name = "Ada"; // can't be reassigned
let count = 0; // can be reassigned
var old = true; // legacy — avoidStandart holatda const ni ishlating. U "bu nom har doim bir xil qiymatga ishora qiladi" degani, bu esa kodni o'qishni osonlashtiradi, chunki u sizning ostingizdan o'zgarib ketmasligini bilasiz. let ni faqat haqiqatan ham qayta qiymat berish kerak bo'lganda ishlating — sikl hisoblagichi, akkumulyator yoki keyinroq almashtiriladigan qiymat.
var — bu eski usul. Uning chalkash scoping qoidalari bor (u { } bloklarni e'tiborsiz qoldiradi va funksiyaning yuqorisiga "hoist" qiladi), shuning uchun yangi kodda uning o'rniga let/const ni ishlatishingiz kerak.
const bilan bog'liq bir nozik jihat: u o'zgaruvchini qayta qiymat berishdan to'xtatadi, lekin qiymatni muzlatmaydi. Siz hali ham const massiv yoki obyektning mazmunini o'zgartira olasiz:
const list = [1, 2];
list.push(3); // fine — list is still the same array
list = [4, 5]; // TypeError — reassignment is blockedPrimitiv turlar
JavaScript'dagi qiymat yoki primitiv, yoki obyektdir. Yettita primitiv mavjud; siz ushbu beshtasini doimiy ishlatasiz:
typeof "hello" // "string"
typeof 42 // "number"
typeof true // "boolean"
typeof undefined // "undefined"
typeof null // "object" ← famous historical bug- string — matn, bir, ikki yoki backtick qo'shtirnoqlarda.
- number — barcha sonlar, butun yoki o'nlik (alohida int/float turi yo'q).
- boolean —
trueyokifalse. - undefined — e'lon qilingan, lekin qiymat berilmagan o'zgaruvchi.
- null — ataylab qo'yilgan "bu yerda qiymat yo'q".
undefined odatda "buni hali hech kim o'rnatmagan" degani; null odatda "kimdir buni ataylab bo'sh qilib qo'ygan" degani. typeof null ning "object" natijasi tildagi uzoq vaqtdan beri mavjud bug — buni shunchaki yodlab oling.
Type coercion
JavaScript siz uchun turlarni bemalol o'zgartiradi, bu qulay, lekin ba'zan kutilmagan bo'lishi mumkin. Bu coercion deb ataladi.
"5" + 1 // "51" → + with a string means concatenation
"5" - 1 // 4 → - forces numbers
"5" * "2" // 10 → so does *
true + 1 // 2 → true becomes 1Esda tutish kerak bo'lgan qoida: + stringlarni afzal ko'radi (u ularni bir-biriga yopishtiradi), boshqa matematik operatorlar esa (-, *, /) hamma narsani sonlarga majbur qiladi.
== vs ===
Bu klassik junior intervyu savoli. Ikkalasi ham ikkita qiymatni taqqoslaydi, lekin:
===(qat'iy tenglik) qiymat va turni tekshiradi — coercion yo'q.==(bo'sh tenglik) avval turlarni mos kelishi uchun coercion qiladi, keyin taqqoslaydi.
5 === "5" // false — number vs string
5 == "5" // true — "5" is coerced to 5 first
null == undefined // true
null === undefined // falseBo'sh == xatolarga olib keladi, chunki uning coercion qoidalarini oldindan aytish qiyin. Har doim === ni ishlating (va !==), agar buni qilmaslik uchun aniq bir sababingiz bo'lmasa.
Intervyu maslahatlari
- Standart holatda
constni tanlang, qayta qiymat berish kerak bo'lgandaletni ishlating,vardan qoching. constqayta qiymat berishni oldini oladi, mutatsiyani emas — siz hali hamconstmassivgapushqila olasiz.- Beshta keng tarqalgan primitivni nomlang va
typeof null === "object"ekanini biling. ==va===farqini misol bilan tushuntiring va har doim===ni ishlatishingizni ayting.
Muhokama
1 izoh
Muhokamada qatnashish uchun tizimga kiring.
KirishЯ прочел и не смог отметить прочитанным пока отведенные минуты не прошли баг/фича сложно сказать ))
Здравствуйте. Прежде всего, большое спасибо за ваш отзыв. Мы понимаем вашу ситуацию. Мы добавили функцию, которая позволяет читателям больше сосредоточиться на заданной теме в отведенное время. Эта функция реализована с помощью алгоритмов, учитывающих скорость чтения читателя. Цель — качество, а не количество.