JS 2026
JavaScript 2026 dagi yangi imkoniyatlar
JavaScript tili spetsifikatsiyasining 17-nashri bo‘lgan ECMAScript 2026 (ES2026) ECMA International tomonidan 2026-yil 30-iyunda rasman tasdiqlandi.
- Accurate Math with
Math.sumPrecise() - Error detection with
Error.isError() Array.fromAsync()yordamida asinxron Array yaratishgetOrInsert()yordamida Map’ni yuksaltirish- High-precision JSON with
rawJSON() Uint8Arrayuchun Base64 va o‘n oltilik kodlashlar
ES2027 ga ko‘chirilgan imkoniyatlar
Ekotizimda etuk polifillar orqali juda ko‘zga ko‘ringan bo‘lsa-da, bir nechta asosiy takliflar 2026 yil iyun oyidagi rasmiy qo‘shilish muddatini o‘tkazib yubordi va keyingi yil uchun rasman rejalashtirilgan:
- Vaqtinchalik API Buggy, 30 yoshli Date obyektining uzoq vaqtdan beri muddati o‘tgan vorisi. Sanadan farqli o‘laroq, Vaqtinchalik obyektlar o‘zgarmasdir va vaqt zonalari va Grigorian bo‘lmagan kalendarlar uchun birinchi darajali yordam beradi.
- Aniq Resurslarni boshqarish (kalit so‘zdan foydalangan holda) C# uslubidagi blok-ko‘lamli utilizatsiya o‘zgaruvchilari kontekstni tark etganda ma’lumotlar bazasi ulanishlari va oqimlarini avtomatik ravishda tozalab, sinab ko‘rishdan qochadi... nihoyat.
Math.sumPrecise() bilan aniq hisoblash
Math.sumPrecise() raqamlar ro‘yxatini yig‘ishda klassik 0,1 + 0,2 === 0,30000000000000004 suzuvchi nuqta muammosini hal qiladi.
Kompyuterlar odamlar kabi 10 ta o‘nli kasrlarda o‘ylamaydilar; ular ikkilik bitlarda o‘ylashadi, bu esa dasturlashda tizimli matematik kamchiliklarni keltirib chiqaradi.
Muammo: JavaScript-da 0,1 + 0,2 suzuvchi nuqtali yaxlitlash xatolari tufayli tarixan 0,30000000000000004 ga teng edi. Bu moliyaviy ilovalar uchun xavfli.
Tuzatish: Math.sumPrecise tizimi asosiy til mexanizmi o‘nli kasrlar ro‘yxatini hisoblash usulini o‘zgartiradi va mukammal summani yetkazib berish uchun tizimning strukturaviy cheklovini chetlab o‘tadi.
getOrInsert() yordamida Map’ni yuksaltirish
Map.prototype.getOrInsert Map tuzilishiga element qo‘shishdan oldin kalit mavjudligini tekshirish uchun mo‘ljallangan plastinkani olib tashlaydi.
Ma’lumotlar strukturasi (masalan, massiv yoki Map) sizning ma’lumotingizni saqlaydi. Ilgari JavaScript-ning o‘rnatilgan tuzilmalarida boshqa tillarda topiladigan umumiy ma’noli yorliqlar yo‘q edi.
Muammo: Agar siz lug‘atni (Map’ni) yangilamoqchi bo‘lsangiz, kalit mavjudligini tekshirish uchun if so‘zini yozishingiz, agar yo‘q bo‘lsa, uni yaratishingiz va keyin uni yangilashingiz kerak edi.
Tuzatish: Map.prototype.getOrInsert sizga bir harakatda ma’lumotlarni topish yoki yaratish imkonini beradi. Bu ma’lumotlar tuzilmasi mahalliy sifatida nima qila olishini kengaytiradi.
Misol
const userRoles = new Map();
// Old Way: Multi-line checks
if (!userRoles.has("admin")) {
userRoles.set("admin", []);
}
userRoles.get("admin").push("Alice");
// New ES2026 Way: Single-line default insertion
userRoles.getOrInsert("admin", []).push("Bob");
userRoles.getOrInsert("admin", []).push("Charlie");
console.log(userRoles.get("admin")); // ['Bob', 'Charlie']
rawJSON() bilan yuqori aniqlikdagi JSON
JSON.rawJSON katta sonlarni (masalan, ma’lumotlar bazasidagi ID stringlarini) ichki yaxlitlash tufayli raqamlarni yo‘qotmasdan saqlab qoladi.
Misol
const precisionLossJSON = '{"id": 9223372036854775807}';
// New ES2026 Reviver: Accesses the raw source string before rounding
const data = JSON.parse(precisionLossJSON, (key, value, context) => {
if (key === 'id') {
return context.source; // "9223372036854775807" as a string
}
return value;
});
// New ES2026 Stringify: Outputs the unrounded big integer safely
const output = JSON.stringify({
id: JSON.rawJSON("9223372036854775807")
});
Error.isError()
Error.isError() - bu qiymat Xato obyekti ekanligini ishonchli tekshirish uchun statik metod,
xatolarni qayta ishlash va tuzatishni takomillashtirish.
Error.isError() xato obyektlarini, hatto ular ichidan kelib chiqqan bo‘lsa ham, ishonchli tarzda aniqlaydi
yoki alohida ish vaqti sinov maydoni.</p>
<div class="w3-example">
<h3>Misol</h3>
<div class="w3-code notranslate jsHigh">
Error.isError(new TypeError()); // true<br>
Error.isError({ name: "Error" }); // false<br>
</div>
<a target="_blank" href="/js/tryit" class="w3-btn w3-margin-bottom" rel="noopener noreferrer">O‘zingiz sinab ko‘ring »</a>
</div>
<p>Hudud uchun xavfsiz xato tekshiruvi: iframe xatosi <code>Error.isError()</code> bilan tekshiriladi va <code>instanceof</code> bilan bajarilmaydi.</p>
<div class="w3-example">
<h3>Misol</h3>
<p><code class="w3-codespan">Error.isError()</code> xavfsiz muqobildir
<code class="w3-codespan">instanceof Error</code> barcha sohalarda muvaffaqiyatsiz.</p>
<div class="w3-code notranslate jsHigh">
try {<br>
throw new TypeError("Invalid format");<br>
} catch (err) {<br>
// Old Way: Could fail across different window contexts<br>
console.log(err instanceof Error);<br>
<br>
// New ES2026 Way: Globally reliable<br>
console.log(Error.isError(err)); // true<br>
}<br>
</div>
</div>
<h3>Brauzerlarda qo‘llab-quvvatlash</h3>
<p><code class="w3-codespan">Error.isError()</code> ko‘plab brauzerlarda allaqachon qo‘llab-quvvatlanadi:</p>
<div class="w3-responsive w3-stretch">
<table class="browserref notranslate">
<tbody><tr>
<th class="bsChrome" title="Chrome"></th>
<th class="bsEdge" title="Edge"></th>
<th class="bsFirefox" title="Firefox"></th>
<th class="bsSafari" title="Safari"></th>
<th class="bsOpera" title="Opera"></th>
</tr>
<tr>
<td>Chrome<br>134</td>
<td>Edge<br>134</td>
<td>Firefox<br>138</td>
<td>Safari<br>❌</td>
<td>Opera<br>119</td>
</tr>
<tr>
<td>Mar 2025</td>
<td>Mar 2025</td>
<td>Apr 2025</td>
<td>❌</td>
<td>May 2025</td>
</tr>
</tbody>
</table>
</div>
<hr>
<a id="mark_fromasync"></a>
<h2>Array.fromAsync()</h2>
<p><code class="w3-codespan"><a href="/js/js_2026#mark_fromasync">Array.fromAsync()</a></code>
ishlab chiquvchilarga yangi Array namunasini yaratish imkonini beruvchi xususiyatdir
asinxron takrorlanuvchilar, massivga o‘xshash obyektlar yoki Promiselar, asinxron manbalardan ma’lumotlarni qayta ishlashni soddalashtiradi.</p>
<div class="w3-example">
<h3>Misol</h3>
<div class="w3-code notranslate jsHigh">
// An async generator simulating a paginated API<br>
async function* fetchPages() {<br>
yield;<br>
yield;<br>
}<br>
<br>
// New ES2026 Way: Resolves and flattens natively<br>
const allData = await Array.fromAsync(fetchPages(), flatMap => flatMap);<br>
console.log(allData); // [1, 2, 3, 4]<br>
</div>
</div>
<div class="w3-example">
<h3>Misol</h3>
<div class="w3-code notranslate jsHigh">
async function* asyncGenerator() {<br>
yield Promise.resolve(1);<br>
yield Promise.resolve(2);<br>
yield Promise.resolve(3);<br>
}<br>
<br>
async function processAsyncData() {<br>
const arr = await Array.fromAsync(asyncGenerator());<br>
}<br>
<br>
processAsyncData();<br>
</div>
<a target="_blank" href="/js/tryit" class="w3-btn w3-margin-bottom" rel="noopener noreferrer">O‘zingiz sinab ko‘ring »</a>
</div>
<h3>Brauzerlarda qo‘llab-quvvatlash</h3>
<p><code class="w3-codespan">Array.fromAsync()</code> barcha asosiy brauzerlarda qo‘llab-quvvatlanadi:</p>
<div class="w3-responsive w3-stretch">
<table class="browserref notranslate">
<tbody><tr>
<th class="bsChrome" title="Chrome"></th>
<th class="bsEdge" title="Edge"></th>
<th class="bsFirefox" title="Firefox"></th>
<th class="bsSafari" title="Safari"></th>
<th class="bsOpera" title="Opera"></th>
</tr>
<tr>
<td>Chrome<br>121</td>
<td>Edge<br>121</td>
<td>Firefox<br>115</td>
<td>Safari<br>16.4</td>
<td>Opera<br>107</td>
</tr>
<tr>
<td>Jan 2024</td>
<td>Jan 2024</td>
<td>Jul 2023</td>
<td>May 2023</td>
<td>Feb 2024</td>
</tr>
</tbody>
</table>
</div>
<hr>
<a id="mark_uint8array"></a>
<h2>Yangi <b>Uint8Array</b> metodlari</h2>
<p>Uint8Array uchun Base64 va Hexadecimal kodlashlar.</p>
<p>Ushbu yangi statik usullar Uint8Array obyektlari va Base64 yoki o‘n oltilik stringlar o‘rtasida to‘g‘ridan-to‘g‘ri konversiyani qo‘shish orqali ikkilik ma’lumotlar bilan ishlashni osonlashtiradi.</p>
<p>Bu tashqi bufer modullariga yoki btoa() va atob() kabi noqulay window metodlariga ehtiyojni yo‘q qiladi.</p>
<ul>
<li><code class="w3-codespan"><a href="/js/js_2026#mark_frombase64">Uint8Array fromBase64()</a></code><br> base64 formatida kodlangan stringdan Uint8Array obyektini yaratadi</li>
<li><code class="w3-codespan"><a href="/js/js_2026#mark_frombase64">Uint8Array toBase64()</a></code> <br>
int8Array-dagi ma’lumotlardan base64-kodlangan qatorni qaytaradi</li>
<li><code class="w3-codespan"><a href="/js/js_2026#mark_fromhex">Uint8Array fromHex()</a></code><br> o‘n oltilik (hexadecimal) stringdan Uint8Array obyektini yaratadi</li>
<li><code class="w3-codespan"><a href="/js/js_2026#mark_fromhex">Uint8Array toHex()</a></code> <br> int8Array-dagi ma’lumotlardan hex (o‘n oltilik) kodlangan stringni qaytaradi</li>
</ul>
<a id="mark_frombase64"></a>
<h2>Uint8Array to/fromBase64() metodlari</h2>
<div class="w3-example">
<h3>Misollar</h3>
<div class="w3-code notranslate jsHigh">
// Creating raw binary data<br>
const bytes = new Uint8Array([72, 101, 108, 108, 111]); // "Hello"<br>
<br>
// New ES2026: Direct string conversions<br>
const base64String = bytes.toBase64();<br>
console.log(base64String); // "SGVsbG8="<br>
<br>
const hexString = bytes.toHex();<br>
console.log(hexString); // "48656c6c6f"<br>
<br>
// Reversing the operation<br>
const restoredBytes = Uint8Array.fromBase64("SGVsbG8=");<br>
</div>
<div class="w3-code notranslate jsHigh">
let string = 'W3Schools 123';<br>
<br>
const arr = Uint8Array.fromBase64(string);
</div>
<a target="_blank" href="/js/tryit" class="w3-btn w3-margin-bottom" rel="noopener noreferrer">O‘zingiz sinab ko‘ring »</a>
<div class="w3-code notranslate jsHigh">
const arr = new Uint8Array([91,116,156,134,138,37,179,93,183]);<br>
<br>
let text = arr.toBase64();
</div>
<a target="_blank" href="/js/tryit" class="w3-btn w3-margin-bottom" rel="noopener noreferrer">O‘zingiz sinab ko‘ring »</a>
</div>
<h3>Brauzerlarda qo‘llab-quvvatlash</h3>
<p><code class="w3-codespan">to/fromBase64()</code> barcha asosiy brauzerlarda qo‘llab-quvvatlanadi:</p>
<div class="w3-responsive w3-stretch">
<table class="browserref notranslate">
<tbody><tr>
<th class="bsChrome" title="Chrome"></th>
<th class="bsEdge" title="Edge"></th>
<th class="bsFirefox" title="Firefox"></th>
<th class="bsSafari" title="Safari"></th>
<th class="bsOpera" title="Opera"></th>
</tr>
<tr>
<td>Chrome<br>140</td>
<td>Edge<br>140</td>
<td>Firefox<br>133</td>
<td>Safari<br>18.2</td>
<td>Opera<br>124</td>
</tr>
<tr>
<td>Sep 2025</td>
<td>Sep 2025</td>
<td>Nov 2024</td>
<td>Des 2024</td>
<td>Nov 2024</td>
</tr>
</tbody>
</table>
</div>
<hr>
<a id="mark_fromhex"></a>
<h2>Uint8Array to/fromHex() metodlari</h2>
<div class="w3-example">
<h3>Misollar</h3>
<div class="w3-code notranslate jsHigh">
let text = '5b749c868a25b35db7';<br>
<br>
const arr = Uint8Array.fromHex(text);
</div>
<a target="_blank" href="/js/tryit" class="w3-btn w3-margin-bottom" rel="noopener noreferrer">O‘zingiz sinab ko‘ring »</a>
<div class="w3-code notranslate jsHigh">
const arr = new Uint8Array([91,116,156,134,138,37,179,93,183]);<br>
<br>
let text = arr.toHex();
</div>
<a target="_blank" href="/js/tryit" class="w3-btn w3-margin-bottom" rel="noopener noreferrer">O‘zingiz sinab ko‘ring »</a>
</div>
<h3>Brauzerlarda qo‘llab-quvvatlash</h3>
<p><code class="w3-codespan">to/fromHex()</code> barcha asosiy brauzerlarda qo‘llab-quvvatlanadi:</p>
<div class="w3-responsive w3-stretch">
<table class="browserref notranslate">
<tbody><tr>
<th class="bsChrome" title="Chrome"></th>
<th class="bsEdge" title="Edge"></th>
<th class="bsFirefox" title="Firefox"></th>
<th class="bsSafari" title="Safari"></th>
<th class="bsOpera" title="Opera"></th>
</tr>
<tr>
<td>Chrome<br>140</td>
<td>Edge<br>140</td>
<td>Firefox<br>133</td>
<td>Safari<br>18.2</td>
<td>Opera<br>124</td>
</tr>
<tr>
<td>Sep 2025</td>
<td>Sep 2025</td>
<td>Nov 2024</td>
<td>Des 2024</td>
<td>Nov 2025</td>
</tr>
</tbody>
</table>
</div>
<a id="mark_sumprecise"></a>
<hr>
<h2>Aniq suzuvchi nuqtali hisoblashlar</h2>
<p><code class="w3-codespan">Math.sumPrecise()</code> metodi sonlar ro‘yxatini yig‘ishda klassik 0.1 + 0.2 === 0.30000000000000004 suzuvchi nuqta muammosini tuzatadi.</p>
<div class="w3-example">
<h3>Misol</h3>
<div class="w3-code notranslate jsHigh">
// Old Way: Inaccuracies accumulate<br>
const items = [0.1, 0.2, 0.3];<br>
const badSum = items.reduce((a, b) => a + b, 0);<br>
myDisplayer(badSum);<br>
<br>
// New ES2026 Way: Perfectly precise<br>
const preciseSum = Math.sumPrecise(items);<br>
myDisplayer(preciseSum);<br>
</div>
<a target="_blank" href="/js/tryit" class="w3-btn w3-margin-bottom" rel="noopener noreferrer">O‘zingiz sinab ko‘ring »</a>
</div>
<h3>Brauzerlarda qo‘llab-quvvatlash</h3>
<p><code class="w3-codespan">Math.sumPrecise()</code> barcha asosiy brauzerlarda qo‘llab-quvvatlanadi:</p>
<div class="w3-responsive w3-stretch">
<table class="browserref notranslate">
<tbody><tr>
<th class="bsChrome" title="Chrome"></th>
<th class="bsEdge" title="Edge"></th>
<th class="bsFirefox" title="Firefox"></th>
<th class="bsSafari" title="Safari"></th>
<th class="bsOpera" title="Opera"></th>
</tr>
<tr>
<td>Chrome<br>147</td>
<td>Edge<br>147</td>
<td>Firefox<br>137</td>
<td>Safari<br>26.2</td>
<td>Opera<br>131;</td>
</tr>
<tr>
<td>Apr 2026</td>
<td>Apr 2026</td>
<td>Apr 2025</td>
<td>Nov 2025</td>
<td>Apr 2026</td>
</tr>
</tbody>
</table>
</div>
<br><br>
</div>
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
