JavaScript 2015 (ES6)
ECMAScript 2015
JavaScript ga ikkinchi asosiy qayta ko'rish.
ECMAScript 2015 ES6 nomi bilan ham taniladi.
JavaScript 2015 (ES6) dagi yangi xususiyatlar
| Xususiyat | Tavsif |
|---|---|
let kalit so'zi | Blok doirasiga ega o'zgaruvchi e'lon qiladi |
const kalit so'zi | O'zgarmas doimiy o'zgaruvchi e'lon qiladi |
| Arrow funksiyalar | Funksiya ifodalarini qisqa sintaksis bilan yozishga imkon beradi |
{a,b} = operatori | Obyekt xususiyatlarini o'zgaruvchilarga tayinlaydi (obyekt destruktizatsiyasi) |
[a,b] = operatori | Massiv qiymatlarini o'zgaruvchilarga tayinlaydi (massiv destruktizatsiyasi) |
... operatori | Massiv yoki iterablni alohida elementlarga yoyadi |
for/of | Iterabl obyektlar qiymatlari bo'ylab aylanadi |
| Map obyektlar | Kalit-qiymat juftlariga ega obyekt |
| Set obyektlar | Noyob qiymatlarni saqlaydigan massiv |
| Klasslar | JavaScript obyektlari uchun shablonlar |
| Promiselar | Asinxron operatsiyaning bajarilishi yoki muvaffaqiyatsizligini ifodalovchi obyekt |
| Symbol | Hech qanday kod tasodifan kira olmaydigan noyob "yashirin" identifikator |
| Standart parametrlar | Funksiya parametrlari uchun standart qiymatlarga ruxsat beradi |
| Rest parametr | Funksiyalarga noaniq sonli argumentlarni qabul qilishga ruxsat beradi |
String.includes() | Satr belgilangan qiymatni o'z ichiga olsa true qaytaradi |
String.startsWith() | Satr belgilangan qiymat bilan boshlansa true qaytaradi |
String.endsWith() | Satr belgilangan qiymat bilan tugasa true qaytaradi |
Array entries() | Massivdan kalit/qiymat juftlari iteratorini qaytaradi |
Array.from() | Satrdan massiv yaratadi |
Array keys() | Massiv kalitlari bilan iteratorni qaytaradi |
Array find() | Testdan o'tgan birinchi element qiymatini qaytaradi |
Array findIndex() | Testdan o'tgan birinchi element indeksini qaytaradi |
Object.assign() | Manba obyektdan maqsad obyektga xususiyatlarni ko'chiradi |
RegExp /u | Regulyar ifodada to'liq Unicode qo'llab-quvvatlashni yoqadi |
RegExp /y | lastIndex xususiyatidan "yopishqoq" qidiruvni bajaradi |
isFinite() | Argument Infinity yoki NaN bo'lmasa true qaytaradi |
isNaN() | Argument NaN bo'lsa true qaytaradi |
| Modullar | Kodingizni alohida fayllarga bo'lishga imkon beradi |
| Reflect | Obyektlar ustida past darajadagi operatsiyalar uchun obyekt |
| Proxy | Boshqaruv operatsiyalari uchun boshqa obyektlarni o'raydigan obyekt |
Math xususiyatlari
| Xususiyat | Tavsif |
|---|---|
Math.trunc(x) | x ning butun son qismini qaytaradi |
Math.sign(x) | -1, 0 yoki 1 qaytaradi (x manfiy, null yoki musbat) |
Math.cbrt(x) | x ning kub ildizini qaytaradi |
Math.log2(x) | x ning 2-asosli logarifmini qaytaradi |
Math.log10(x) | x ning 10-asosli logarifmini qaytaradi |
Number xususiyatlari
| Xususiyat | Tavsif |
|---|---|
Number.EPSILON | 1 va 1 dan katta eng kichik son o'rtasidagi farq |
Number.MIN_SAFE_INTEGER | Aniq ifodalanishi mumkin bo'lgan minimal qiymat |
Number.MAX_SAFE_INTEGER | Aniq ifodalanishi mumkin bo'lgan maksimal qiymat |
Number.isInteger() | Argument butun son bo'lsa true qaytaradi |
Number.isSafeInteger() | Argument xavfsiz butun son bo'lsa true qaytaradi |
JavaScript 2015 barcha zamonaviy brauzerlarda 2017-yil iyun dan beri qo'llab-quvvatlanadi.
ES6 Internet Explorer da qo'llab-quvvatlanmaydi.
JavaScript let
let kalit so'zi blok doirasiga ega o'zgaruvchi e'lon qilishga imkon beradi.
var x = 10
// Bu yerda x 10
{
let x = 2
// Bu yerda x 2
}
// Bu yerda x 10JavaScript const
const kalit so'zi doimiy (o'zgarmas qiymatli JavaScript o'zgaruvchisi) e'lon qilishga imkon beradi. Doimiylar let o'zgaruvchilariga o'xshaydi, faqat qiymat o'zgartirib bo'lmaydi.
var x = 10
// Bu yerda x 10
{
const x = 2
// Bu yerda x 2
}
// Bu yerda x 10Arrow funksiyalar
Arrow funksiyalar funksiya ifodalarini yozishning qisqa sintaksisidir. Sizga function kalit so'zi, return kalit so'zi va figurali qavslar kerak emas.
// Arrow dan oldin:
let myFunction = function (a, b) {
return a * b
}
// Arrow bilan:
let myFunction = (a, b) => a * bEslatma
Arrow funksiyalarning o'ziga xos this si yo'q. Ular obyekt metodlarini aniqlash uchun yaxshi mos kelmaydi. Arrow funksiyalar ko'tarilmaydi. Ular ishlatilishidan oldin aniqlanishi kerak.
return va figurali qavslarni faqat funksiya bitta bayonot bo'lsa tushirib qoldirish mumkin:
// Bu ishlamaydi
let myFunction = (x, y) => { x * y }
// Bu ishlamaydi
let myFunction = (x, y) => return x * y
// Faqat bu ishlaydi
let myFunction = (x, y) => { return x * y }Obyekt destruktizatsiyasi
Destruktizatsiya tayinlashi massiv qiymatlari va obyekt xususiyatlarini o'zgaruvchilarga tayinlashni osonlashtiradi.
const person = {
firstName: 'John',
lastName: 'Doe',
age: 50,
eyeColor: 'blue'
}
let { firstName, age } = personEslatma
Obyektni destruktizatsiya qilganda, o'zgaruvchilar uchun mos obyekt kalitlari (nomlari) bilan bir xil nomni ishlatishingiz kerak. Kalitlar (nomlar) tartibi muhim emas.
Massiv destruktizatsiyasi
const fruits = ['Banana', 'Orange', 'Apple', 'Mango']
let [fruit1, fruit2] = fruitsSpread (...) operatori
... operatori massiv yoki iterablni alohida elementlarga yoyadi.
const numbers = [23, 55, 21, 87, 56]
let minValue = Math.min(...numbers)
let maxValue = Math.max(...numbers)... operatori massivlarni birlashtirish uchun ishlatilishi mumkin:
const arr1 = [1, 2, 3]
const arr2 = [4, 5, 6]
const arr3 = [...arr1, ...arr2]For/Of sikli
JavaScript for/of bayonoti iterabl obyektlar qiymatlari bo'ylab aylanadi. for/of massivlar, satrlar, Map'lar, NodeList'lar va boshqa iterabl ma'lumotlar tuzilmalari bo'ylab aylanishga imkon beradi.
Massiv bo'ylab aylantirish
const cars = ['BMW', 'Volvo', 'Mini']
let text = ''
for (let x of cars) {
text += x + ' '
}Satr bo'ylab aylantirish
let language = 'JavaScript'
let text = ''
for (let x of language) {
text += x + ' '
}JavaScript Map'lar
Map — bu kalit-qiymat juftlarini saqlaydigan obyekt bo'lib, obyektlarga o'xshash, lekin farqlar bor:
- Kalitlar istalgan ma'lumot turida bo'lishi mumkin (obyektlar, funksiyalar, primitiv qiymatlar)
- Kalitlarning asl kiritilish tartibini saqlaydi
const fruits = new Map([
['apples', 500],
['bananas', 300],
['oranges', 200]
])JavaScript Set'lar
Set — istalgan turdagi noyob qiymatlarni saqlaydigan obyekt. Set faqat noyob qiymatlarni o'z ichiga olishi mumkin. Dublikat qiymat qo'shishga urinish e'tiborsiz qoldiriladi.
const letters = new Set()
letters.add('a')
letters.add('b')
letters.add('c')JavaScript klasslar
JavaScript klasslari JavaScript obyektlari uchun shablonlardir. Klass yaratish uchun class kalit so'zidan foydalaning. Har doim constructor() nomli metod qo'shing:
class Car {
constructor(name, year) {
this.name = name
this.year = year
}
}Klassdan foydalanish:
const myCar1 = new Car('Ford', 2014)
const myCar2 = new Car('Audi', 2019)Eslatma
JavaScript klasi obyekt emas. U JavaScript obyektlari uchun shablon.
JavaScript Promiselar
JavaScript Promise — bu asinxron operatsiyaning bajarilishi yoki muvaffaqiyatsizligi va uning qiymatlarini ifodalovchi obyekt.
const myPromise = new Promise(function (myResolve, myReject) {
myResolve() // muvaffaqiyatli bo'lganda
myReject() // xato bo'lganda
})
myPromise.then(
function (value) {
/* muvaffaqiyatli bo'lsa kod */
},
function (error) {
/* xato bo'lsa kod */
}
)Symbol turi
JavaScript Symbol — Number, String yoki Boolean kabi primitiv ma'lumot turi. U hech qanday boshqa kod tasodifan kira olmaydigan noyob "yashirin" identifikatorni ifodalaydi.
const person = {
firstName: 'John',
lastName: 'Doe',
age: 50,
eyeColor: 'blue'
}
let id = Symbol('id')
person[id] = 140353
// Endi person[id] = 140353
// lekin person.id hali ham undefinedEslatma
Symbollar har doim noyobdir. Bir xil tavsif bilan ikkita symbol yaratsangiz, ular turli qiymatlarga ega bo'ladi:
Symbol('id') == Symbol('id') // falseStandart parametr qiymatlari
ES6 funksiya parametrlariga standart qiymatlar berishga imkon beradi.
function myFunction(x, y = 10) {
// y uzatilmasa yoki undefined bo'lsa 10 ga teng
return x + y
}
myFunction(5) // 15 qaytaradiFunksiya rest parametri
Rest parametr (...) funksiyaga noaniq sonli argumentlarni massiv sifatida qabul qilishga imkon beradi:
function sum(...args) {
let sum = 0
for (let arg of args) sum += arg
return sum
}
let x = sum(4, 9, 16, 25, 29, 100, 66, 77)String.includes()
includes() metodi satr belgilangan qiymatni o'z ichiga olsa true, aks holda false qaytaradi:
let text = 'Hello world, welcome to the universe.'
text.includes('world') // true qaytaradiString.startsWith()
startsWith() metodi satr belgilangan qiymat bilan boshlansa true, aks holda false qaytaradi:
let text = 'Hello world, welcome to the universe.'
text.startsWith('Hello') // true qaytaradiString.endsWith()
endsWith() metodi satr belgilangan qiymat bilan tugasa true, aks holda false qaytaradi:
let text = 'John Doe'
text.endsWith('Doe') // true qaytaradiArray entries()
entries() metodi kalit/qiymat juftlari bilan Array Iterator obyektini qaytaradi. entries() metodi asl massivni o'zgartirmaydi.
const fruits = ['Banana', 'Orange', 'Apple', 'Mango']
const f = fruits.entries()
for (let x of f) {
document.getElementById('demo').innerHTML += x
}Array.from()
Array.from() metodi uzunlik xususiyatiga ega istalgan obyektdan yoki istalgan iterabl obyektdan Array obyektini qaytaradi.
Array.from('ABCDEFG') // [A,B,C,D,E,F,G] qaytaradiArray keys()
keys() metodi massiv kalitlari bilan Array Iterator obyektini qaytaradi.
const fruits = ['Banana', 'Orange', 'Apple', 'Mango']
const keys = fruits.keys()
let text = ''
for (let x of keys) {
text += x + '\n'
}Array find()
find() metodi test funksiyasidan o'tgan birinchi massiv elementining qiymatini qaytaradi.
const numbers = [4, 9, 16, 25, 29]
let first = numbers.find(myFunction)
function myFunction(value, index, array) {
return value > 18
}Array findIndex()
findIndex() metodi test funksiyasidan o'tgan birinchi massiv elementining indeksini qaytaradi.
const numbers = [4, 9, 16, 25, 29]
let first = numbers.findIndex(myFunction)
function myFunction(value, index, array) {
return value > 18
}Modullar
Modullar ikki xil usulda import qilinadi:
// Nomlangan eksportlardan import
import { name, age } from './person.js'// Standart eksportdan import
import message from './message.js'JavaScript Reflect
Reflect dan oldin, obyekt operatsiyalari tarqoq edi — in, delete kalit so'zlari, Object.defineProperty kabi metodlar va [[Get]], [[Set]] kabi til mexanizmlari ishlatilardi.
Reflect bularning barchasini toza Reflect metodlariga birlashtiradi:
- Reflect metodlari hamma narsani birlashtiradi
- Reflect metodlari kutilgan xatti-harakatga ega
- Reflect metodlari Proxy bilan mukammal ishlaydi
const person = { name: 'John', lastname: 'Doe' }
let answer = Reflect.has(person, 'name')
// in operatorini ishlatish bilan bir xil:
let answer2 = 'name' in personJavaScript Proxy
const user = { name: 'Jan', age: 40 }
const proxy = new Proxy(user, {
get(target, property) {
console.log('Getting: ' + property)
return target[property]
},
set(target, property, value) {
console.log('Setting: ' + property)
return target[property]
}
})
proxy.name = 'John'
let text = proxy.nameYangi Math metodlari
ES6 Math obyektiga quyidagi metodlarni qo'shdi:
Math.trunc(4.9) // 4 qaytaradi
Math.trunc(-4.2) // -4 qaytaradiMath.sign(-4) // -1 qaytaradi
Math.sign(0) // 0 qaytaradi
Math.sign(4) // 1 qaytaradiMath.cbrt(8) // 2 qaytaradi
Math.cbrt(64) // 4 qaytaradi
Math.cbrt(125) // 5 qaytaradiMath.log2(2) // 1 qaytaradiMath.log10(10) // 1 qaytaradiYangi Number xususiyatlari
let x = Number.EPSILONlet x = Number.MIN_SAFE_INTEGERlet x = Number.MAX_SAFE_INTEGERNumber.isInteger() metodi
Number.isInteger() metodi argument butun son bo'lsa true qaytaradi.
Number.isInteger(10) // true qaytaradi
Number.isInteger(10.5) // false qaytaradiNumber.isSafeInteger() metodi
Xavfsiz butun son — bu ikki aniqlikdagi son sifatida aniq ifodalanishi mumkin bo'lgan butun son. Number.isSafeInteger() metodi argument xavfsiz butun son bo'lsa true qaytaradi.
Number.isSafeInteger(10) // true qaytaradi
Number.isSafeInteger(12345678901234567890) // false qaytaradiEslatma
Xavfsiz butun sonlar -(2⁵³ - 1) dan +(2⁵³ - 1) gacha bo'lgan barcha butun sonlardir.
Yangi global metodlar
ES6 ikkita yangi global raqam metodini qo'shdi:
isFinite() metodi
Global isFinite() metodi argument Infinity yoki NaN bo'lsa false qaytaradi. Aks holda true qaytaradi:
isFinite(10 / 0) // false qaytaradi
isFinite(10 / 1) // true qaytaradiisNaN() metodi
Global isNaN() metodi argument NaN bo'lsa true qaytaradi. Aks holda false qaytaradi:
isNaN('Hello') // true qaytaradiJavaScript Object.assign()
Object.assign() metodi bir yoki bir nechta manba obyektdan maqsad obyektga xususiyatlarni ko'chiradi.
const person1 = {
firstName: 'John',
lastName: 'Doe',
age: 50,
eyeColor: 'blue'
}
const person2 = { firstName: 'Anne', lastName: 'Smith' }
Object.assign(person1, person2)RegExp u modifikatori
u (unicode) flagi regulyar ifodada to'liq Unicode qo'llab-quvvatlashni yoqadi. Standart holatda, JavaScript 4-baytli Unicode belgilarni (masalan, emoji yoki kamroq uchraydigan belgilar) ikkita alohida 2-baytli surrogat kod birligi sifatida ko'radi. u flagi naqshni Unicode kod nuqtalar ketma-ketligi sifatida ko'radi.
let text = 'Hello 😜'
let pattern = /\p{Emoji}/u
let result = pattern.test(text)RegExp y modifikatori
y (Sticky) flagi RegExp obyektining lastIndex xususiyatidan "yopishqoq" qidiruvni bajaradi. y flagi keyingi mosliklar belgilarni o'tkazib yubormasdan oldingi moslikdan darhol keyin boshlanishini ta'minlaydi.
let text = 'abc def ghi'
let pattern = /\w+/y
// 4-pozitsiyadan moslikni boshlash
pattern.lastIndex = 4
let result = text.match(pattern)