ES6 va keyingi versiyalarda qanday asosiy imkoniyatlar paydo bo'ldi?

JuniorJavaScript #javascript #es6

Savol

ES6 (ECMAScript 2015) va standartning keyingi versiyalari qanday muhim o'zgarishlarni olib keldi?

Qisqa javob

ES6 — JavaScript tili tarixidagi eng katta yangilanish: blokli ko'rinish sohasi (let/const), klasslar, modullar, strelka funksiyalar, promise'lar, destrukturizatsiya va boshqa ko'p narsalar. Keyingi yillik versiyalar (ES2016+) ko'proq nuqtaviy, lekin foydali yaxshilanishlarni qo'shadi.

Batafsil javob

ES6'dagi (2015) asosiylari:

  • let/const — var o'rniga blokli ko'rinish sohasiga ega o'zgaruvchilar.
  • Strelka funksiyalar — qisqa sintaksis, leksik this.
  • Shablon satrlar — interpolyatsiya va ko'p qatorli satrlar.
  • Massiv va obyektlarni destrukturizatsiya qilish.
  • class/extends — prototiplar ustidagi OOP sintaksisi.
  • Modullar (import/export) — CommonJS/AMD o'rniga standart modul tizimi.
  • Promise — asinxron kod uchun standart primitiv.
  • Map/Set — kiritish tartibini saqlagan holda noyob qiymatlar va kalit-qiymat juftliklari uchun to'plamlar, istalgan tur kalit bilan.

Keyingi versiyalarning foydali qo'shimchalari (ES2016+):

  • Array.prototype.includes() (ES2016) — indekslarni solishtirmasdan elementning mavjudligini tekshirish.
  • Darajaga ko'tarish operatori ** (ES2016).
  • Object.values() / Object.entries() (ES2017) — obyektning qiymatlari/juftliklarini massiv sifatida olish.
  • Object.fromEntries() (ES2019) — teskari amal: juftliklar massivi → obyekt.
  • Nullish coalescing ?? (ES2020) — || dan farqli o'laroq, standart qiymatni faqat null/undefined uchun qo'yadi, har qanday falsy (0, '') uchun emas.
  • Optional chaining ?. (ES2020) — ichma-ich xususiyatlarga xavfsiz kirish.

Misol

// Nullish coalescing vs ||
const count = 0
console.log(count || 42)  // 42 — 0 falsy, bu kerakli natija emas
console.log(count ?? 42)  // 0  — 0 null/undefined emas

// Object.entries / fromEntries
const obj = { a: 1, b: 2 }
const doubled = Object.fromEntries(
  Object.entries(obj).map(([key, value]) => [key, value * 2])
)
// { a: 2, b: 4 }

// Istalgan turdagi kalitlar bilan Map
const cache = new Map([
  ['foo', 'bar'],
  [someObject, 'obyekt-kalit bo'yicha qiymat']
])

Qo'shimcha savollar

  • Map lug'at rolida oddiy obyektdan nimasi bilan yaxshiroq?
  • ?? va || o'rtasidagi farq nimada va bu qachon haqiqatan muhim bo'ladi?
  • ES-modullar (import/export) CommonJS (require) bilan qanday bog'liq?