March 28, 2024

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:

  1. Fixed Values(O`zgarmas qiymatlar) : Bular "literals" deb ataladi.
  2. Variable values(O`zgaruvchi qiymatlar) : Bular "variables" deb ataladi.

JavaScript Literals

Fixed Values(O`zgarmas qiymatlar)qiymatlar uchun ikkita eng muhim sintaksis qoidalari:

  1. JavaScript raqamlari o'nli yoki kasrsiz yozilishi mumkin JavaScript Numbers
  2. Javascript satrlari - bu bitta yoki ikkita qo`shtirnoq ichida yozilishi mumkin bo'lgan matn. Javascript Strings
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)

Natija

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`ladi

var 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`lmaydi

let bilan aniqlangan o'zgaruvchilarni qayta e'lon qilib bo'lmaydi.

let bilan e'lon qilingan o'zgaruvchini tasodifan qayta e'lon qila olmaysiz.

let bilan bu amalni amalga oshira 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

JavaScript const

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.

Shu sababli siz bu ishlarni amalga oshira olmaysiz:

  • Doimiy qiymatni qayta tayinlang
  • Doimiy massivni qayta tayinlash
  • Doimiy ob'ektni qayta tayinlash
    Lekin siz:
  • Doimiy massiv elementlarini o'zgartirish mumkun
  • Doimiy ob'ektning xususiyatlarini o'zgartirish mumkun

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

  • "==" - ga teng
  • "=== " - teng qiymat va teng turdagi
  • "!=" - teng emas
  • "!==" - qiymat teng emas yoki teng emas
  • ">" - dan katta
  • "<" - dan kam
  • ">=" - dan katta yoki teng
  • "<=" - dan kam yoki teng

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:

  1. & (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

Bitwise & Operator

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:

  1. Object
  2. Array
  3. Date

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.

  1. 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 hisoblashlarda NaN turi hosil bo'ladi.
console.log("string" + 1); // NaN
console.log(NaN * 2); // NaN
console.log("son emas" / 2 - 1); // NaN

Faqatgina bir holat bor:

console.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:

  1. Ikkitalik qo'shtirnoq (double quotes): "Salom!"
  2. Bittalik qo'shtirnoq (single quotes): 'Salom!'
  3. 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 da

Boolean

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.

Masalan:

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:

  1. Object
  2. Array
  3. Date

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.

Misol uchun:

let age = 19;

Ushbu kodimizda,

age — bu Identifier (o’zgaruvchi nomi),

19 = bu Value (Qiymati).

Xotirada esa o’zining qandaydir yagona IDsiga ega, masalan 0064CCABA21

Agar, age nomli o’zgaruvchimizni dasturimizda chaqirsak, tahminan bunday hodisa ro’y beradi.

age => 0064CCABA21 => 19

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.

Ya’ni,

let myObject = 0064AAABA12 (Call stack) => 23VVCA020 (Heap manzil) => {age: 19} (Bizga keladigan qiymat);

Endi esa, qaytaramiz:

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.

Buni qanday bilamiz ?

Ushbu kodga qarang:

let object_1 = {age: 19};

let object_2 = object_1;

object_2.age = 22;

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.

Bunga sabab esa, mana bunday:

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 :

  1. Global scope
  2. Locol scope
  3. Function scope
  4. Bloce scope

Scope lar quydagicha korinadi :

scope larni joylashish va korinish .

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