31 पॉइंट द्वारा GN⁺ 2025-04-16 | 4 टिप्पणियां | WhatsApp पर शेयर करें
  • JavaScript 2025 में भी लगातार विकसित हो रहा है, और कुछ फीचर्स कम चर्चित होने के बावजूद बेहद उपयोगी हैं
  • नए Iterator helper methods बड़े पैमाने के डेटा ट्रांसफ़ॉर्मेशन में कहीं अधिक memory-efficient तरीके से काम करते हैं
  • आखिर से एक्सेस करने के लिए at(), आसान Promise.withResolvers() उपयोग, deep copy के लिए structuredClone() आदि
  • Set के लिए set operations और template string tagging functions, साथ ही WeakMap/WeakSet का उपयोग अब भी कई डेवलपर्स नज़रअंदाज़ करते हैं

Iterator Helper methods

  • पारंपरिक arr.filter().map() जैसी chaining में हर स्टेप पर नया array बनता है, जो inefficient है
  • arr.values().drop(10).take(10).map(...).toArray() जैसी iterator-based chaining से इसे बेहतर बनाया जा सकता है
  • मुख्य methods:
    • drop(): शुरुआती n items छोड़ता है
    • take(): केवल शुरुआती n items लेता है
    • filter(), map(), flatMap(): array methods की तरह काम करते हैं
    • reduce(), some(), every(), find(): condition testing और cumulative calculation को सपोर्ट करते हैं
    • toArray(): अंत में array में बदलता है
  • Safari ने 31 मार्च 2025 से support शुरू किया, लेकिन अभी सभी browsers इसे support नहीं करते

Array at()

  • arr.at(n) arr[n] जैसा है, लेकिन negative indexing से पीछे से access किया जा सकता है
  • उदाहरण: [10, 20, 30].at(-1)30
  • arr[arr.length - 1] जैसे असुविधाजनक तरीके के बिना आख़िरी element तक पहुँचा जा सकता है

Promise.withResolvers()

  • पुराना तरीका: new Promise((resolve, reject) => { ... }) में बाहर से resolve/reject को स्टोर करना
  • अब: const { promise, resolve, reject } = Promise.withResolvers() से ज़्यादा संक्षिप्त और सहज उपयोग संभव है

String.replace() callback का उपयोग

  • replace() और replaceAll() का दूसरा argument सिर्फ string ही नहीं, callback function भी हो सकता है
  • उदाहरण: "X, X, X".replaceAll("X", (match, i) => match + i)"X0, X3, X6"
  • एक बार में कई तरह के replacement संभव → performance और memory दोनों के लिहाज़ से efficient

वेरिएबल swap

  • पुराना तरीका: temp variable का उपयोग
  • संक्षिप्त तरीका: [a, b] = [b, a] से array destructuring के जरिए variables swap करना

structuredClone()

  • JSON.stringify() + JSON.parse() के बजाय ज़्यादा सटीक और efficient deep copy को support करता है
  • फायदे:
    • NaN, undefined, bigint आदि को भी support करता है
    • circular references को भी सुरक्षित रूप से कॉपी करता है
    • बड़े objects पर memory और speed efficiency बेहतर होती है

Tagged Template Literals

  • template strings को किसी खास function से parse किया जा सकता है
  • HTML escape handling जैसी dynamic string post-processing में उपयोगी
  • उदाहरण:
    escapeHtml tag function से <br> ${'<br>'}<br> <br>

WeakMap / WeakSet

  • सामान्य Map, Set जैसे ही, लेकिन:
    • key के रूप में केवल object मान्य हैं (primitive values नहीं)
    • GC target बनने पर अपने आप हट जाते हैं
  • circular reference की संभावना हो, या बिना side effects object metadata स्टोर करना हो, तब उपयुक्त

Set set operations का support

JavaScript में Set object के लिए कई logical operations नए जोड़े गए हैं:

  • difference(): difference set (A - B)
  • intersection(): intersection (A ∩ B)
  • union(): union (A ∪ B)
  • symmetricDifference(): symmetric difference (A △ B)
  • isDisjointFrom(): क्या कोई overlapping element नहीं है
  • isSubsetOf(): क्या subset है
  • isSupersetOf(): क्या superset है

4 टिप्पणियां

 
wfedev 2025-04-23

ऐसा लगता है कि literal parse करने पर variables भी string के रूप में आने वाली समस्या हल हो गई है। साझा करने के लिए धन्यवाद।

 
pompapa 2025-04-17

उदाहरण: "X, X, X".replaceAll("X", (match, i) => match + i)"X0, X1, X2"

उदाहरण गलत है। i में match हुई स्थिति होती है।
इसलिए परिणाम "X0, X3, X6" है.

 
xguru 2025-04-17

अरे, सही कहा। AI ने उदाहरण गलत बना दिया था। मैंने उसे ठीक कर दिया है। आपकी तेज़ नज़र के लिए धन्यवाद!

 
click 2025-04-16

values का एहसास कुछ java stream api जैसा है, इसलिए तुलना करके देखा तो array का size छोटा हो तो values के बिना filter करना ज़्यादा तेज़ है। चूंकि यह iterator-based है, इसलिए chaining जितनी बढ़ती है, values से एक बार होकर जाने वाला तरीका उतना तेज़ होने का असर भी दिख सकता है। benchmark के लिए https://jsperf.app/dixutu देखें।