JavaScript
JavaScript Syntax
bu JavaScript dasturlari qanday tuzilganligi ifodalovchi qoidalari to'plami.
// O'zgaruvchilarni qanday yaratish mumkin: var x; let y;
// O'zgaruvchilardan qanday foydalanish kerak: x = 5; y = 6; z = x + y bo'lsin;
JavaScript Values
JavaScript sintaksisida ikkita turdagi qiymatlar bor:
- Fixed Values(O`zgarmas qiymatlar) : Bular "literals" deb ataladi.
- Variable values(O`zgaruvchi qiymatlar) : Bular "variables" deb ataladi.
JavaScript Literals
Fixed Values(O`zgarmas qiymatlar)qiymatlar uchun ikkita eng muhim sintaksis qoidalari:
JavaScript Numbers let num1 = 50 let num2 = 50.05 Javascript Strings let str1 = "Geek" let str2 = 'Geeks' console.log(num1) console.log(num2) console.log(str1) console.log(str2)
50 50.05 Geek Geeks
JavaScript Variables
Dasturlash tilida o'zgaruvchilar ma'lumotlar qiymatlarini saqlash uchun ishlatiladi.
JavaScript o'zgaruvchilarni e'lon qilish uchun var, let va const kalit so'zlaridan foydalanadi.
O'zgaruvchilarga qiymat berish uchun tenglik belgisi ishlatiladi.
JavaScript var
JavaScript var bayonoti funksiya doirasi yoki global miqyosda o'zgaruvchilarni e'lon qiladi. ES6 dan oldin, let va const dan farqli o'laroq, var blok doirasisiz o'zgaruvchilar deklaratsiyasi uchun yagona kalit so'z edi.
var bilan belgilangan o'zgaruvchilar qayta e'lon qilinishi mumkin.
var bilan buni amalga oshirishingiz mumkin:
var x = "Jon Doe";
var x = 0;
Var { } bloki bilan e'lon qilingan o'zgaruvchilarga blok tashqarisidan kirish mumkin
{
var x = 2;
}
// x ni bu yerda ishlatib bo`ladivar kalit so'zi yordamida o'zgaruvchini qayta e'lon qilish muammolarni keltirib chiqarishi mumkin.
Blok ichidagi o'zgaruvchini qayta e'lon qilish o'zgaruvchini blokdan tashqarida ham qayta e'lon qiladi:
var x = 10; // x bu yerda 10
{
var x = 2;
// x bu yerda 2
}// x bu yerda 2
JavaScript Let
let kalit so'zi ES6 (2015) da kiritilgan
let bilan e'lon qilingan o'zgaruvchilar Block Scopega ega
let bilan e'lon qilingan o'zgaruvchilar foydalanishdan oldin e'lon qilinishi kerak
let bilan e'lon qilingan o'zgaruvchilarni bir xil doirada qayta e'lon qilib bo'lmaydi
{ } blokida e'lon qilingan o'zgaruvchilarga blokdan tashqaridan o`zgartiruvchi e`lon qilish mumkin emas:
{
let x = 2;
}
// x ni bu yerda ishlatib bo`lmaydilet bilan aniqlangan o'zgaruvchilarni qayta e'lon qilib bo'lmaydi.
let bilan e'lon qilingan o'zgaruvchini tasodifan qayta e'lon qila olmaysiz.
let x = "John Doe";
let x = 0;
let kalit so'zi yordamida o'zgaruvchini qayta e'lon qilish bu muammoni hal qilishi mumkin.
Blok ichidagi o'zgaruvchini qayta e'lon qilish o'zgaruvchini blokdan tashqarida qayta e'lon qilmaydi:
let x = 10; // x 10
{
let x = 2;
// x 2
}// x 10
const kalit so'zi ES6 (2015) da kiritilgan
const bilan aniqlangan o'zgaruvchilarni qayta e'lon qilib bo'lmaydi
const bilan belgilangan o'zgaruvchilarni qayta tayinlab bo'lmaydi
const bilan aniqlangan o'zgaruvchilar blok doirasiga ega
Const kalit so'zi biroz chalg'ituvchi.
U doimiy qiymatni belgilamaydi. Bu qiymatga doimiy havolani belgilaydi.
let va const blok doirasiga ega.
let va const ni qayta e'lon qilib bo'lmaydi.
let va const ishlatishdan oldin e'lon qilinishi kerak.
let va const bind bo`lmaydi.
let va const hoisted bo`lmaydi.
JavaScript Operatorlar
JavaScript dasturlash tilida ham boshqa dasturlash tillari singari operatorlar mavjud. Bularga quyidagilarni misol keltirishimiz mumkin.
- Arifmetik operatorlar
- Tayinlash operatorlari
- String Opertorlar
- Solishtirish operatorlari
- Mantiqiy opertorlar
- Bitli operatorlar
JavaScript arifmetik operatorlari
Arifmetik operatorlar raqamlar ustida arifmetikani bajarish uchun ishlatiladi:
- "+" - Qo'shimcha
- "-" - Ayirish
- "*" - Ko'paytirish
- "**" - Eksponentatsiya (ES2016)
- "/" - Bo'lish
- "%" - Modul (boʻlinish qoldigʻi)
- "++" - 1 qo'shib borish
- "--" - 1 kamaytirib borish
JavaScript Tayinlash operatorlari
Qo'shishni tayinlash operatori (+=) o'zgaruvchiga qiymat qo'shadi.
JavaScript String operatorlari
Operator + qatorlarni qo'shish (birlashtirish) uchun ham ishlatilishi mumkin.
let text1 = "Uzbek "; text1 += "Developers"; Uzbek Developers
JavaScript solishtirish operatorlari
JavaScript Bitwise Operatorlari
Bitwise operatorlari → bu int yoki unsigned int tipidagi sonlar bilan bitlar qatlamida ishlaydigan operatorlardir. Ya’ni ular bilan sonlar ustida o’nlik sanoq sistemasidagi holatda emas, balki to’g’ridan-to’g’ri 2 lik sanoq sistemasidagi holatida amallar bajariladi. Boshlanishiga ular g’alati va tushunarsiz tuyilsa ham, aslida ular sodda, lekin juda ham kuchli va foydali operatorlar hisoblanadi.
Eng asosiy narsa Bitwise operatorlari ikkita butun son ustida bajariladi va chiquvchi natija ham butun son bo’ladi.
Shu sababli ularni mantiqiy amallar bilan adashtirmaslik va ular o’rnida ishlatmaslik kerak bo’ladi.
Asosiy Bitwise Operatorlari
Dasturlashda, asosan, 6 bitwise operatorlari ko’rib chiqiladi va ishlatiladi. Ular:
- & (AND) operatori ikkita sonni operand sifatida oladi va ularni har bir biti (0 yoki 1) ustida AND amalini bajaradi. Natijaviy bit faqat ikkala bit ham 1 bo’lganda 1 bo’ladi.
Masalan, 37 va 23 sonlari ustidagi & operatori natijasini hisoblaymiz
Har mos ustun bir biriga ko’paytirilayapti va ikkala ustun 1 bo’lganida natija 1 bo’ladi qolgan holatda 0 bo’lishini ko’rishimiz mumkin. Natijada 101 hosil bo’ladi va uni yana 10 lik sanoq sistemasiga converter qilganimizda 5 natijani olishimiz mumkin.
JavaScriptda ma'lumot turlari (Data Types)
JavaScriptda har qanday qiymat biror bir turga oid. Masalan son yoki obyekt. Ular sodda va murakkab, JavaScript tili bilan aytganda "primitive" va "non-primitive" tuslariga bo'linadi.
Primitive - o'zida sodda qiymatni saqlaydigan o'zgaruvchilarga aytiladi. Masalan son, matn va hokazo.
Non-primitive - o'zida murakkab ko'rinishdagi ma'lumotlar, masalan funksiyalar, arraylar va boshqalarni saqlaydigan o'zgaruvchilarga aytiladi.
Biz biror o'zgaruvchiga xohlagan turdagi ma'lumot turini berishimiz mumkin. Masalan, biror qiymatga son berib, unga yangi ma'lumot turi, masalan matn (keyinchalik - string) qiymatini berishimiz mumkin. Chunki, JavaScript "dynamically-typed language" ya'ni dinamik tarzda yoziladigan til sirasiga kiradi.
Undan tashqari Obyektning(Object DataTypes) ma'lumot turlari ham mavjud. Ular 3 ga bo'linadi:
Number
let n = 123; n = 12.36;
Number ya'ni "son" turi butun va ratsional sonlarni ifoda etadi. Ular bilan barcha arifmetik amallarni, masalan qo'shuv + , ayiruv - , ko'paytiruv * , bo'luv / va hokazolarni amalga oshirish mumkin.
Oddiy sonlardan tashqari, ma'lum "raqamli qiymatga ega" ma'lumot turlari ham mavjud.
Infinity & -Infinity- cheksizlikni bildiradi. Har qanday sondan katta yoki kichik sonni yaratish uchun foydalansak bo'ladi.
console.log(1 / 0); /* Infinity */ console.log(Infinity); /* Infinity */ console.log(1 + Infinity); /* Infinity */
NaN- inglizchada "not a number" ya'ni "son emas" ma'nosini beradi. Noaniq yoki noto'g'ri arifmetik hisoblashlardaNaNturi hosil bo'ladi.
console.log("string" + 1); // NaN
console.log(NaN * 2); // NaN
console.log("son emas" / 2 - 1); // NaNconsole.log(NaN ** 0) // 1 🫤
BigInt
Number turi juda katta sonlarni ya'ni (253-1) va -(253-1) qiymatigacha bo'lgan sonlar bilan "kelishmaydi", aniqroq aytsak ular xatolik beradi. Ma'lumot uchun, (253-1) = 9007199254740991 bo'ladi.
// bu yerda number ning turi BigInt const number = 954153219879161321981911819621465432;
String
String - inglizchadan "chiziq" yoki "ip" degan ma'noni beradi. Lekin, bu tarjimalar stringlarni to'liq ifodalamaydi.
Qisqa qilib aytganda, String - bu qo'shtirnoqlar ichida yozilgan har qanday qiymat.
JavaScriptda qo'shtirnoqlarning 3 turi mavjud:
- Ikkitalik qo'shtirnoq (double quotes):
"Salom!" - Bittalik qo'shtirnoq (single quotes):
'Salom!' - Orqaga yo'nalgan qo'shtirnoq (backticks) :
`Salom`
Ikkitalik va bittalik qo'shtirnoqlar orasida farq yo'q. Backticks qo'shtirnoqlarining ma'lum funksiyalari bor. Ular bizga o'zgaruvchi va jumlalarni ${...} ga o'rash orqali satrlarga joylashtirishga imkon beradi. Keling, qo'shtirnoqlarni o'zaro farqini ko'ramiz:
const name = "Ali";
// Ikkitalik va bittalik qo'shtirnoqlar
console.log("Salom " + name + "!"); // Salom Ali!
// Backtick qo'shtirnoq
console.log(`Salom ${name}!`) // Salom Ali!
console.log(`Mening yoshim ${1 + 2} da`) // Mening yoshim 3 daBoolean
Boolean - JavaScriptda mantiqiy ma'lumot turlarini ifodalash uchun ishlatiladi. Ularning faqatgina 2ta qiymati bor: true va false ya'ni to'g'ri va noto'g'ri.
const isAuthSuccess = true; // ha, identifikatsiya muvafaqqiyatli bo'ldi let isUserFemale = false; // yo'q, foydalanuvchi ayol kishi emas
Null
Null - bo'sh, nol yoki no'malum ma'lumot turini ifodalaydi.
null ni odatda biror o'zgaruvchiga ataylab biriktiriladi. Masalan, biz biror o'zgaruvchini kodimiz avvalida bo'sh bo'lishini lekin keyinchalik unga boshqa yaroqli qiymat berishni xohlasak nulldan foydalansak bo'ladi.
Undefined
Undefined ham null ga o'xshash. Farqi shundaki, undefined turidagi o'zgaruvchilarga qiymat berilmagan yoki qabul qilinmagan bo'ladi. Masalan, siz biror serverdan API ma'lumotlarini olishni xohlagan lekin o'sha ma'lumotlar noto'g'ri tarzda yoki umuman kelmagan bo'lsa, undefined qiymati hosil bo'ladi.
Undan tashqari Obyektning(Object DataTypes) ma'lumot turlari ham mavjud. Ular 3 ga bo'linadi:
Call Stack va heap
Bizning JavaScriptimizda xotira mavjud, bu xotirada biz ochgan o’zgaruvchilarimiz saqlanib boradi. Uning nomi Call stack(Bu yerda boshqa jarayonlar ham bo’ladi) va Heap(Objectlarimiz uchun). Mavzuyimizga oid joyiga qaytamiz. Ushbu rasmga e’tibor qarating.
Ushbu rasmda barcha jarayon aniq va tiniq ko’rsatilgan.
Chapdan boshlab tushunishni boshlaymiz.
Identifier — bizning ochgan o’zgaruvchimiz nomi.Address — O’sha o’zgaruvchimizning xotiradagi manzili.Value — O’zgaruvchiga berilgan qiymat.
Biz yangi o’zgaruvchi ochsak, uning xotirada o’z manzili va qiymati bo’ladi.
let age = 19;
age — bu Identifier (o’zgaruvchi nomi),
Xotirada esa o’zining qandaydir yagona IDsiga ega, masalan 0064CCABA21
Agar, age nomli o’zgaruvchimizni dasturimizda chaqirsak, tahminan bunday hodisa ro’y beradi.
Ya’ni, age xotiraga o’zida saqlab turgan IDni beradi, xotira esa aynan o’sha IDlik qiymatni olib beradi.
Xuddi kutubxonaga borib, kitobning raqamini aytasiz va sizga o’sha kitobni berishgandek.
Agarda, age ga yangi qiymat bersak, u yangi ID ochib olib, o’ziga yangi qiymat saqlab qo’yadi xolos.
Mana aynan shu xususiyat tepadagi 7 ta tiplarni PRIMITIVE tip qiladi.
Ya’ni o’zlarida yagona qiymatni qabul qilishadi va u qiymatdan o’zlaridan boshqa hech narsa foydalana olmaydi.Non-primitive (Object) tipi
Tepadagi rasmga yana e’tibor qaratamiz.
Esingizda bo’lsa, avalki maqolamda, Objectlar tipiga nimalar kirishini aytgan edim, Array, object, functions va hkz.
Objectlarning “reference type” deyilishiga asosiy sabab, ular Call stack(xotiramiz)da qiymatni o’zini emas, balki o’sha qiymatni Heap deb atalgan joydagi Addressini ko’rsatib yuboradi.
Bu xuddi, kutubxonaga borasiz, kitobning raqamini aytasiz, ular esa sizga boshqa raqam berib boshqa kutubxonadan olishingizni aytishadi.
let myObject = {age: 19};
Ushbu kodimiz xotirada tahminan bunday joylashgan:
myObject — bu Identifier (o’zgaruvchi nomi)
0064AAABA12 — bu esa o’sha o’zgaruvchini Call Stackdagi tahminiy manzili
23VVCA020 — bu esa tepadagi manzilda turgan qiymat, (Bu Heap ga yo’naltirilgan manzil)
{age: 19} — bu esa Heapda 23VVCA020 manzilidagi joylashgan qiymat.
let myObject = 0064AAABA12 (Call stack) => 23VVCA020 (Heap manzil) => {age: 19} (Bizga keladigan qiymat);
Objectlarning “reference type” deyilishiga asosiy sabab, ular Call stack(xotiramiz)da qiymatni o’zini emas, balki o’sha qiymatni Heap deb atalgan joydagi Addressini ko’rsatib yuboradi.
console.log(object_1) // {age: 22}
Ko’rib turganingizdek, object_2 ni object_1 ga tenglashtirib qo’ydim va object_2 ni ichidagi age ni o’zgartirdim, ammo object_1 ham o’zgardi.
object_1 o’zida Heap manzilni saqlab turgan edi,
Misol uchun, object_1 = 23VVCA020 (HeapManzili)
object_2 ni object_1 ga tenglashtirganimizda,
object_2 ham 23VVCA020 ga teng bo’ldi.
Ushbu rasmdan ko’rib oling :
Mana shu yerdagi, Heapga o’tkazib yuborishini Reference deyiladi.
Buni o’rganishni eng yaxshi yo’li o’zingiz sinab ko’rishingiz.
Qanday qilib unda object_1 ning ichidagi qiymatlarni boshqa yap-yangi objectga o’tkazsak bo’ladi ?
buning uchun, spread operator(uchta nuqta …), yoki Object.assign() orqali qilsak bo’ladi.
let object_1 = {age: 19};let object_2 = {…object_1}; // yoki Object.assign({}, object_1);// Yangi object ochib oldik, HEAP da ham o’zining alohida manzili bilanobject_2.age = 22;console.log(object_1) // {age: 19}console.log(object_2) // {age: 22}JavaScript da scope lar
Scopelar 4ta turga bolinadi bular :
Scope lar quydagicha korinadi :
Global scope — Hamma kodlar yoziladigan joy
Local scope — Functioni orab turgan joy
Function scope — Function ichida joylashgan qismi
Bloce scops — Biron bir shat yozilsa , Masalan: if elese yokiy for