Brogrammist
1.2K subscribers
113 photos
11 videos
4 files
114 links
Veb-dasturlash bo'yicha kamtarona bilim va tajribalarimni ulashaman.

Konsultatsiya: https://connected.uz/x/DiyorbekSadullaev

Sayt: https://diyorbek.blog

YouTube: https://youtube.com/@brogrammistuz

Insta: https://instagram.com/brogrammistuz
Download Telegram
`JSON.stringify` metodida shu xususiyat borligini bilasizmi?

Obyektlarni `String`ga o'girib beruvchi bu metodni ko'pincha 1 ta parametr bilan ishlatamiz:
JSON.stringify(object)

Lekin metodda yana 2 ta (optional) parametr bor. To'liq korinishi:

JSON.stringify(
object,
?replacer,
?space
)

1. replacer - bu parametr funksiya yoki string'lar massivi bo'lishi mumkin.

Agar massiv bersak, obyektning faqat massivdagi elementlarga mos keluvchi field/maydonlarigina olinadi. Masalan:


> JSON.stringify({ a: 5, b: 3 }, ['b'])
> '{"b":3}'



Agar funksiya bo'lsa, u orqali biz field'larni filter qilishimiz mumkin:


> JSON.stringify(
{ a: 5, b: 3 },
(key, value) =>
key == 'a'
? 10
: value
)
> '{"a":10,"b":3}'




2. space - bu parametr orqali obyektimizni indentatsiya qilishimiz mumkin. Masalan space parametri 2 ga teng bo'lsa, natija quydagicha bo'ladi:


> var obj = { name: "Tony", status: { rank : 1, type: "Avenger"}}

> console.log(JSON.stringify(
obj,
undefined,
2
))

{
"name": "Tony",
"status": {
"rank": 1,
"type": "Avenger"
}
}

#js #tips #jsdaily
πŸ‘5
This media is not supported in your browser
VIEW IN TELEGRAM
input.valueAsNumber

"Numeric" input elementlarning qiymatini JS orqali o'qiganimizda ularni har doim Number tipiga konversiya qilamiz. Chunki elementning .value field'i bizga har doim String qaytaradi.

Agar input elementlarning .valueAsNumber field'ini ishlatsak bu bosh og'riqdan qutilamiz. Bu field faqat "numeric" inputlar bilan ishlaydi. Ya'ni input type'imiz "number", "date", "datetime", yoki "range" bo'lishi kerak. Aks holda bu field qiymati NaN ga teng bo'ladi. Hattoki kirilgan qiymat son bo'lsa ham, lekin input type "text" bo'lsa, .valueAsNumber bizga NaN qaytaradi.

Tepadagi qisqa demonstratsiya StackBlitz'ning Twitter sahifasidan uxlatildi.

#js #jsdaily #tips
πŸ‘6
Brogrammist
`string.charAt(i)` vs `string[i]` String'dagi bitta simvolni string[index] yoki string.charAt(index) usulida olish mumkin. Agar index'imiz [0, `string.length - 1`] oralig'ida bo'lsa, bu 2 usulning bir biridan farqi yo'q. Lekin, index'imiz "boshqachaoq" qiymat…
string.charAt(index) 'ning yana bir xislati, agar index butun son bo'lmasa, uni o'zidan kichik eng katta butun songa yaxlitlaydi:

'hello'.charAt(1.23) // 'e'
// 1.23 -> 1


Unda index manfiy bo'lsachi? Yoki string'ning uzunligidan katta bo'lsachi?

Bu holatda .charAt bo'sh string qaytaradi:

'hello'.charAt(100); // ''
'hello'.charAt(-34); // ''


Tabiiyki, yuqoridagi holatlarda string[index] usuli shunchaki undefined natijasini beradi.

#js #jsdaily #tips
πŸ‘3
Unicode string ustida iteratsiya

Quiydagi misolga e'tibor bering:
const msg = 'Hell😬';

// for ... in
for (let i in msg) {
console.log(msg[i]);
}

// Output:
// 'H', 'e', 'l', 'l', '
??'

Bilarmidingiz, "for...in" unicode string'lar bilan ishlamasligini?

Agar bilmagan bo'lsangiz, qanday qilib unicode string'lar ustida to'g'ri iteratsiya qilishni ham bilib oling:

// for ... of
for (let c of msg) {
console.log(c);
}

// Output:
// 'H', 'e', 'l', 'l', '😬'

#js #jsdaily #tips
πŸ‘20
JavaScript'da `void` operatori

void o'zidan keyin keladigan ifoda qiymatini `undefined`ga aylantirib yuboradi:

void 0 === undefined; // true
void 1 === undefined; // true
void 'Hello' === undefined; // true

Yuqoridagi misollardan ko'rinib turibdiki "void" qilingan ifoda qiymati undefined'ga teng.

Agar biror funksiya "return" qiladigan qiymat kerak bo'lmasa, uning oldiga void qo'yish yaxshi amaliyot (ya'ni best practice) hisoblanadi:

button.onclick = () => void doSomething();


Qiziq fakt: Ba'zi minifikatorlar undefined uzun so'z bo'lgani uchun uni void 0 bilan almashtirib ketadi.

#js #jsdaily #tips
πŸ‘23
JavaScript'da link yaroqliligini tekshirish

Linklar o'ziga yarasha sintaksis/standartga ega. Masalan:
"https://google.com?q=cat&cr=UZ"

Bu link yaroqli (valid), chunki unda standart bo'yicha protokol, unda keyin "://" qo'yilib, keyin domain, keyin esa "path" va "query" parametrlar to'g'ri qo'yilgan.

Buni biz "regular expression" orqali tekshirishimiz mumkin. Lekin ishoning bunaqa RegExp'ni yozishni xohlamagan bo'lardingiz.

Kutubxona (library) ishlatsakchi? To'g'risi, proyektingiz kattalashgani sari har bir bayt siz uchun qimmatli. Ularni keraksiz joylari ko'p qandaydir kutubxonaga sarflashga arzimaydi.

Gapning qisqasi JavaScriptning o'zida linklar bilan ishlovchi "built-in" interfeys bor. Bu URL obyekti.

URL obyekti konstruktori argument sifatida string oladi. Agar string yaroqsiz link bo'lsa "exception" otiladi. Shuning uchun uni "try-catch" bilan o'rash kerak.

Quyidagi funksiyani bemalol Copy&Paste qilishingiz mumkin:

function isValidURL(url) {
try {
new URL(url);
return true;
} catch (error) {
return false;
}
};

isValidURL("http://google.uz");
// true

isValidURL("https//invalidcom");
// false


#js #jsdaily #tips
πŸ‘25
4. toString(radix) - sonnni boshqa sanoq sistemasiga o'girib beradi:

// 10 likdan 16 likka
(1234).toString(16); // '4d2'

// 10 likdan 8 likka
(789).toString(8); // '1425'

// 10 likdan 2 likka
(123).toString(2); // '1111011'

// 16 likdan 10 likka
(0x5ac).toString(10); // '1452'

// 8 likdan 10 likka
(0123).toString(10); // '83'

Xullas, istagancha konvertatsiya qilavaramiz.
Shuni sezib qoldimki radix parametri istalgan son bo'lishi mumkin ekan, faqat 2-lik, 8-lik kabilar emas:

// 8 likdan 5 likka
(065).toString(5); // '203'

// 16 likdan 27 likka
(0xdac).toString(27); // '4lh'

Zo'r-a?

#js #jsdaily #tips
πŸ‘28😁1