{"id":32654,"date":"2025-10-24T09:41:05","date_gmt":"2025-10-24T06:41:05","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32654"},"modified":"2025-10-24T09:41:05","modified_gmt":"2025-10-24T06:41:05","slug":"es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/","title":{"rendered":"ES2020: JavaScript&#8217;in Yeni Nesil \u00d6zelliklerini Ke\u015ffedin"},"content":{"rendered":"<p><body><\/p>\n<h2>ES2020: JavaScript&#8217;in Yeni Nesil \u00d6zelliklerini Ke\u015ffedin<\/h2>\n<p>JavaScript, web geli\u015ftirmenin temel ta\u015f\u0131 olmaya devam ederken, her y\u0131l \u00e7\u0131kan yeni ECMAScript (ES) standartlar\u0131 ile s\u00fcrekli olarak evrimle\u015fmektedir. Bu evrim, dilin daha g\u00fc\u00e7l\u00fc, daha esnek ve geli\u015ftirici dostu olmas\u0131n\u0131 sa\u011flamaktad\u0131r. ES2020 (resmi ad\u0131yla ECMAScript 2020), dile bir dizi heyecan verici ve kullan\u0131\u015fl\u0131 yeni \u00f6zellik getirerek, geli\u015ftiricilerin daha temiz, daha g\u00fcvenli ve daha verimli kod yazmalar\u0131na olanak tan\u0131m\u0131\u015ft\u0131r. Bu makalede, ES2020&#8217;nin getirdi\u011fi ba\u015fl\u0131ca yeni \u00f6zellikleri derinlemesine inceleyecek, her birinin ne i\u015fe yarad\u0131\u011f\u0131n\u0131, neden \u00f6nemli oldu\u011funu ve nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 \u00f6rneklerle a\u00e7\u0131klayaca\u011f\u0131z.<\/p>\n<h3>ES2020&#8217;nin Temel Yeni \u00d6zellikleri<\/h3>\n<p>ES2020, JavaScript&#8217;e \u00f6nemli katk\u0131lar sunan \u00e7e\u015fitli \u00f6zellikler i\u00e7erir. Bunlar aras\u0131nda b\u00fcy\u00fck tam say\u0131larla \u00e7al\u0131\u015fmay\u0131 kolayla\u015ft\u0131ran <code>BigInt<\/code>, Promise tabanl\u0131 i\u015flemlerin sonu\u00e7lar\u0131n\u0131 daha iyi y\u00f6netmemizi sa\u011flayan <code>Promise.allSettled()<\/code>, global nesneye standart bir eri\u015fim sa\u011flayan <code>globalThis<\/code>, null veya undefined de\u011ferlerle u\u011fra\u015f\u0131rken kodu sadele\u015ftiren Optional Chaining (<code>?.<\/code>) ve Nullish Coalescing Operator (<code>??<\/code>), mod\u00fcllerin dinamik olarak y\u00fcklenmesine olanak tan\u0131yan <code>import()<\/code>, ve regex e\u015fle\u015fmelerini daha verimli hale getiren <code>String.prototype.matchAll()<\/code> bulunmaktad\u0131r. \u015eimdi bu \u00f6zelliklerin her birini detayl\u0131ca inceleyelim.<\/p>\n<h3>BigInt: B\u00fcy\u00fck Tam Say\u0131larla \u00c7al\u0131\u015fmak<\/h3>\n<p>JavaScript&#8217;in standart <code>Number<\/code> tipi, IEEE 754 \u00e7ift hassasiyetli kayan nokta format\u0131n\u0131 kullan\u0131r. Bu, <code>Number<\/code> tipinin g\u00fcvenli bir \u015fekilde temsil edebilece\u011fi tam say\u0131 aral\u0131\u011f\u0131n\u0131n s\u0131n\u0131rl\u0131 oldu\u011fu anlam\u0131na gelir. Maksimum g\u00fcvenli tam say\u0131 <code>2^53 - 1<\/code> (yani <code>Number.MAX_SAFE_INTEGER<\/code>), minimum g\u00fcvenli tam say\u0131 ise <code>-(2^53 - 1)<\/code> (yani <code>Number.MIN_SAFE_INTEGER<\/code>)&#8217;d\u0131r. Bu aral\u0131\u011f\u0131n d\u0131\u015f\u0131ndaki tam say\u0131larla i\u015flem yap\u0131ld\u0131\u011f\u0131nda, hassasiyet kay\u0131plar\u0131 ya\u015fanabilir ve beklenmedik sonu\u00e7lar ortaya \u00e7\u0131kabilir. Finansal uygulamalar, kriptografi veya \u00e7ok b\u00fcy\u00fck ID&#8217;lerle \u00e7al\u0131\u015fan sistemler gibi alanlarda bu durum ciddi sorunlara yol a\u00e7abilir.<\/p>\n<p>\u0130\u015fte bu noktada <code>BigInt<\/code> devreye girer. <code>BigInt<\/code>, keyfi hassasiyetli tam say\u0131lar\u0131 temsil etmek i\u00e7in yeni bir say\u0131sal ilkel tiptir. Yani, teorik olarak s\u0131n\u0131rs\u0131z b\u00fcy\u00fckl\u00fckteki tam say\u0131larla \u00e7al\u0131\u015fabiliriz.<\/p>\n<h4>BigInt Nas\u0131l Kullan\u0131l\u0131r?<\/h4>\n<p>Bir <code>BigInt<\/code> de\u011feri olu\u015fturman\u0131n iki ana yolu vard\u0131r:<br \/>\n1.  Bir tam say\u0131n\u0131n sonuna <code>n<\/code> ekleyerek:<\/p>\n<pre><code class=\"language-javascript\">const buyukSayi = 1234567890123456789012345678901234567890n;\n    console.log(typeof buyukSayi); \/\/ \"bigint\"<\/code><\/pre>\n<p>2.  <code>BigInt()<\/code> fonksiyonunu kullanarak:<\/p>\n<pre><code class=\"language-javascript\">const baskaBuyukSayi = BigInt(\"9876543210987654321098765432109876543210\");\n    console.log(baskaBuyiSayi); \/\/ 9876543210987654321098765432109876543210n<\/code><\/pre>\n<p><code>BigInt<\/code> de\u011ferleri, standart aritmetik operat\u00f6rlerle (<code>+<\/code>, <code>-<\/code>, <code><em><\/code>, <code>\/<\/code>, <code>%<\/code>, <code><\/em>*<\/code>) kullan\u0131labilir. Ancak, t\u00fcm i\u015flenenlerin <code>BigInt<\/code> olmas\u0131 gerekir. <code>BigInt<\/code> ile <code>Number<\/code> tiplerini do\u011frudan kar\u0131\u015ft\u0131rmak bir <code>TypeError<\/code> hatas\u0131na yol a\u00e7ar.<\/p>\n<pre><code class=\"language-javascript\">const a = 10n;\nconst b = 20n;\nconsole.log(a + b); \/\/ 30n\nconsole.log(a * b); \/\/ 200n\n\n\/\/ console.log(a + 10); \/\/ TypeError: Cannot mix BigInt and other types, use explicit conversions<\/code><\/pre>\n<p>E\u011fer <code>BigInt<\/code> ve <code>Number<\/code> aras\u0131nda d\u00f6n\u00fc\u015f\u00fcm yapman\u0131z gerekiyorsa, a\u00e7\u0131k\u00e7a d\u00f6n\u00fc\u015ft\u00fcrme yapmal\u0131s\u0131n\u0131z. Ancak bu d\u00f6n\u00fc\u015f\u00fcmler s\u0131ras\u0131nda dikkatli olun, <code>BigInt<\/code>&#8216;i <code>Number<\/code>&#8216;a d\u00f6n\u00fc\u015ft\u00fcrmek hassasiyet kayb\u0131na yol a\u00e7abilir.<\/p>\n<pre><code class=\"language-javascript\">const bigNum = 100n;\nconst num = Number(bigNum); \/\/ 100\n\nconst buyukHassasiyetliBigInt = BigInt(\"9007199254740992\"); \/\/ 2^53\nconst numberFromBigInt = Number(buyukHassasiyetliBigInt);\nconsole.log(numberFromBigInt); \/\/ 9007199254740992 (bu \u00f6rnekte hen\u00fcz hassasiyet kayb\u0131 yok)\n\nconst dahaBuyukBigInt = BigInt(\"9007199254740993\"); \/\/ 2^53 + 1\nconst numberFromDahaBuyukBigInt = Number(dahaBuyukBigInt);\nconsole.log(numberFromDahaBuyukBigInt); \/\/ 9007199254740992 (hassasiyet kayb\u0131!)<\/code><\/pre>\n<p><code>BigInt<\/code> ve <code>Number<\/code> kar\u015f\u0131la\u015ft\u0131rmalar\u0131 da do\u011frudan yap\u0131lamaz, ancak gev\u015fek e\u015fitlik (<code>==<\/code>) kontrol\u00fc yap\u0131labilir:<\/p>\n<pre><code class=\"language-javascript\">console.log(10n == 10); \/\/ true\nconsole.log(10n === 10); \/\/ false (farkl\u0131 tipler)\nconsole.log(10n > 5); \/\/ true<\/code><\/pre>\n<p><code>BigInt<\/code>, JavaScript&#8217;in b\u00fcy\u00fck say\u0131sal hesaplamalar gerektiren alanlardaki yeteneklerini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rm\u0131\u015ft\u0131r.<\/p>\n<h3>Promise.allSettled(): T\u00fcm Promise&#8217;lar\u0131n Sonu\u00e7lar\u0131n\u0131 Beklemek<\/h3>\n<p><code>Promise.all()<\/code> metodu, birden fazla Promise&#8217;\u0131n tamamlanmas\u0131n\u0131 beklemek i\u00e7in harikad\u0131r. Ancak bir dizi Promise&#8217;dan herhangi biri reddedilirse (<code>rejected<\/code>), <code>Promise.all()<\/code> hemen reddedilir ve di\u011fer Promise&#8217;lar\u0131n sonu\u00e7lar\u0131n\u0131 g\u00f6z ard\u0131 eder. Bu davran\u0131\u015f, bazen istedi\u011fimizden farkl\u0131 olabilir; \u00f6rne\u011fin, t\u00fcm Promise&#8217;lar\u0131n sonucunu (ba\u015far\u0131l\u0131 veya ba\u015far\u0131s\u0131z) bilmek isteyebiliriz.<\/p>\n<p>\u0130\u015fte <code>Promise.allSettled()<\/code> bu ihtiyac\u0131 kar\u015f\u0131lamak i\u00e7in ES2020 ile geldi. <code>Promise.allSettled()<\/code>, kendisine verilen t\u00fcm Promise&#8217;lar tamamland\u0131\u011f\u0131nda (yerine getirildi\u011finde veya reddedildi\u011finde) \u00e7\u00f6z\u00fclen yeni bir Promise d\u00f6nd\u00fcr\u00fcr. D\u00f6nd\u00fcr\u00fclen Promise, her bir orijinal Promise&#8217;\u0131n durumunu ve de\u011ferini veya nedenini i\u00e7eren bir nesneler dizisi ile \u00e7\u00f6z\u00fcl\u00fcr.<\/p>\n<h4>Promise.allSettled() Nas\u0131l Kullan\u0131l\u0131r?<\/h4>\n<p>Her bir sonu\u00e7 nesnesi iki ana \u00f6zelli\u011fe sahiptir:<br \/>\n*   <code>status<\/code>: Promise&#8217;\u0131n durumu (<code>\"fulfilled\"<\/code> veya <code>\"rejected\"<\/code>).<br \/>\n*   <code>value<\/code> (sadece <code>fulfilled<\/code> ise): Promise&#8217;\u0131n ba\u015far\u0131yla \u00e7\u00f6z\u00fcld\u00fc\u011f\u00fc de\u011fer.<br \/>\n*   <code>reason<\/code> (sadece <code>rejected<\/code> ise): Promise&#8217;\u0131n reddedilme nedeni.<\/p>\n<pre><code class=\"language-javascript\">const promise1 = Promise.resolve(3);\nconst promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'hata!'));\nconst promise3 = Promise.resolve(42);\n\nPromise.allSettled([promise1, promise2, promise3])\n  .then((results) => {\n    results.forEach((result, index) => {\n      if (result.status === 'fulfilled') {\n        console.log(<code>Promise ${index + 1} ba\u015far\u0131l\u0131 oldu:<\/code>, result.value);\n      } else {\n        console.log(<code>Promise ${index + 1} reddedildi:<\/code>, result.reason);\n      }\n    });\n  });\n\n\/\/ \u00c7\u0131kt\u0131:\n\/\/ Promise 1 ba\u015far\u0131l\u0131 oldu: 3\n\/\/ Promise 2 reddedildi: hata!\n\/\/ Promise 3 ba\u015far\u0131l\u0131 oldu: 42<\/code><\/pre>\n<p>Bu \u00f6rnekte g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi, <code>promise2<\/code> reddedilmi\u015f olmas\u0131na ra\u011fmen, <code>Promise.allSettled()<\/code> di\u011fer Promise&#8217;lar\u0131n sonu\u00e7lar\u0131n\u0131 da bize iletir. Bu, \u00f6zellikle birden fazla ba\u011f\u0131ms\u0131z API \u00e7a\u011fr\u0131s\u0131 yapt\u0131\u011f\u0131n\u0131zda ve her birinin sonucunu, birinin ba\u015far\u0131s\u0131z olup olmad\u0131\u011f\u0131na bak\u0131lmaks\u0131z\u0131n kaydetmek veya i\u015flemek istedi\u011finizde \u00e7ok kullan\u0131\u015fl\u0131d\u0131r. Hata durumunda bile di\u011fer ba\u015far\u0131l\u0131 i\u015flemlere devam etme veya t\u00fcm sonu\u00e7lar\u0131 loglama gibi senaryolarda <code>Promise.allSettled()<\/code> vazge\u00e7ilmezdir.<\/p>\n<h3>globalThis: Standardize Edilmi\u015f Global Nesne Eri\u015fimi<\/h3>\n<p>JavaScript&#8217;in farkl\u0131 \u00e7al\u0131\u015fma ortamlar\u0131nda (taray\u0131c\u0131lar, Node.js, Web Workers vb.) global nesneye eri\u015fim \u015fekli tarihsel olarak farkl\u0131l\u0131k g\u00f6stermi\u015ftir.<br \/>\n*   Taray\u0131c\u0131larda <code>window<\/code><br \/>\n*   Node.js&#8217;te <code>global<\/code><br \/>\n*   Web Workers&#8217;ta <code>self<\/code><br \/>\n*   Baz\u0131 ortamlarda <code>this<\/code> (global kapsamda)<\/p>\n<p>Bu durum, evrensel (universal\/isomorphic) JavaScript kodu yazarken sorunlara yol a\u00e7\u0131yordu, \u00e7\u00fcnk\u00fc geli\u015ftiricilerin farkl\u0131 ortamlar i\u00e7in global nesneye eri\u015fim mant\u0131\u011f\u0131 yazmalar\u0131 gerekiyordu:<\/p>\n<pre><code class=\"language-javascript\">\/\/ Eski y\u00f6ntem: Ortama g\u00f6re global nesneye eri\u015fim\nconst getGlobal = () => {\n  if (typeof self !== 'undefined') { return self; }\n  if (typeof window !== 'undefined') { return window; }\n  if (typeof global !== 'undefined') { return global; }\n  throw new Error('Global nesne bulunamad\u0131!');\n};\nconst globalObject = getGlobal();<\/code><\/pre>\n<p>ES2020 ile gelen <code>globalThis<\/code>, bu sorunu \u00e7\u00f6zmek i\u00e7in standartla\u015ft\u0131r\u0131lm\u0131\u015f bir yol sunar. <code>globalThis<\/code> \u00f6zelli\u011fi, hangi ortamda olursan\u0131z olun, her zaman global nesneye referans verir.<\/p>\n<h4>globalThis Nas\u0131l Kullan\u0131l\u0131r?<\/h4>\n<pre><code class=\"language-javascript\">\/\/ Taray\u0131c\u0131da:\nconsole.log(globalThis === window); \/\/ true\n\n\/\/ Node.js'te:\nconsole.log(globalThis === global); \/\/ true\n\n\/\/ Web Worker'da:\nconsole.log(globalThis === self); \/\/ true<\/code><\/pre>\n<p><code>globalThis<\/code> sayesinde, art\u0131k ortamlar aras\u0131 uyumluluk i\u00e7in karma\u015f\u0131k ko\u015fullu mant\u0131k yazmaya gerek kalmadan, global kapsamda tan\u0131mlanm\u0131\u015f de\u011fi\u015fkenlere veya fonksiyonlara tek bir standart yolla eri\u015febiliriz. Bu, k\u00fct\u00fcphane ve \u00e7er\u00e7eve geli\u015ftiricileri i\u00e7in b\u00fcy\u00fck bir kolayl\u0131k sa\u011flar ve daha ta\u015f\u0131nabilir JavaScript kodu yaz\u0131lmas\u0131na yard\u0131mc\u0131 olur.<\/p>\n<h3>Optional Chaining (?): G\u00fcvenli \u00d6zellik Eri\u015fimi<\/h3>\n<p>JavaScript&#8217;te null veya undefined de\u011ferlere sahip bir nesnenin \u00f6zelliklerine eri\u015fmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda, <code>TypeError<\/code> hatas\u0131 al\u0131rs\u0131n\u0131z. Bu durum, \u00f6zellikle API&#8217;lerden gelen verilerle veya karma\u015f\u0131k nesne yap\u0131lar\u0131yla \u00e7al\u0131\u015f\u0131rken s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan bir sorundur. Geleneksel olarak, bu hatalar\u0131 \u00f6nlemek i\u00e7in zincirleme null kontrolleri yapmam\u0131z gerekirdi:<\/p>\n<pre><code class=\"language-javascript\">const kullanici = {\n  ad: \"Ali\",\n  adres: {\n    sehir: \"\u0130stanbul\",\n    sokak: \"Ana Cadde\"\n  },\n  iletisim: null\n};\n\n\/\/ Geleneksel null kontrol\u00fc\nlet sehir;\nif (kullanici && kullanici.adres && kullanici.adres.sehir) {\n  sehir = kullanici.adres.sehir;\n} else {\n  sehir = \"Bilinmiyor\";\n}\nconsole.log(sehir); \/\/ \u0130stanbul\n\n\/\/ \u0130leti\u015fim bilgisi olmayan bir nesne i\u00e7in\nlet telefon;\n\/\/ if (kullanici.iletisim.telefon) { ... } \/\/ TypeError: Cannot read properties of null (reading 'telefon')<\/code><\/pre>\n<p>ES2020 ile gelen Optional Chaining (<code>?.<\/code>) operat\u00f6r\u00fc, bu t\u00fcr kontrolleri \u00e7ok daha k\u0131sa ve okunabilir bir \u015fekilde yapmam\u0131z\u0131 sa\u011flar. Bir \u00f6zelli\u011fe veya metoda eri\u015fmeden \u00f6nce, e\u011fer yol \u00fczerindeki bir referans <code>null<\/code> veya <code>undefined<\/code> ise, ifade hemen <code>undefined<\/code> d\u00f6ner ve hata atmaz.<\/p>\n<h4>Optional Chaining Nas\u0131l Kullan\u0131l\u0131r?<\/h4>\n<pre><code class=\"language-javascript\">const kullanici = {\n  ad: \"Ali\",\n  adres: {\n    sehir: \"\u0130stanbul\",\n    sokak: \"Ana Cadde\"\n  },\n  iletisim: null\n};\n\n\/\/ Optional Chaining ile g\u00fcvenli eri\u015fim\nconst sehir = kullanici?.adres?.sehir;\nconsole.log(sehir); \/\/ \u0130stanbul\n\nconst postaKodu = kullanici?.adres?.postaKodu; \/\/ adres.postaKodu yok\nconsole.log(postaKodu); \/\/ undefined\n\nconst telefon = kullanici?.iletisim?.telefon; \/\/ iletisim null\nconsole.log(telefon); \/\/ undefined\n\n\/\/ Optional Chaining ile metot \u00e7a\u011fr\u0131s\u0131\nconst kullanici2 = {\n  ad: \"Ay\u015fe\",\n  sayHello: function() { return <code>Merhaba, ben ${this.ad}<\/code>; }\n};\nconst kullanici3 = { ad: \"Mehmet\" };\n\nconsole.log(kullanici2.sayHello?.()); \/\/ Merhaba, ben Ay\u015fe\nconsole.log(kullanici3.sayHello?.()); \/\/ undefined (metot yok, hata yok)\n\n\/\/ Optional Chaining ile dizi eleman\u0131na eri\u015fim\nconst renkler = ['k\u0131rm\u0131z\u0131', 'ye\u015fil'];\nconsole.log(renkler?.[0]); \/\/ k\u0131rm\u0131z\u0131\nconsole.log(renkler?.[2]); \/\/ undefined<\/code><\/pre>\n<p>Optional Chaining, kodun karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 azalt\u0131r, okunabilirli\u011fini art\u0131r\u0131r ve hatalar\u0131 \u00f6nler. \u00d6zellikle i\u00e7 i\u00e7e ge\u00e7mi\u015f nesnelerle \u00e7al\u0131\u015f\u0131rken veya bir API&#8217;den gelen verilerin yap\u0131s\u0131n\u0131n her zaman kesin olmad\u0131\u011f\u0131n\u0131 bildi\u011finiz durumlarda \u00e7ok de\u011ferlidir.<\/p>\n<h3>Nullish Coalescing Operator (??): Tan\u0131ml\u0131 De\u011ferler \u0130\u00e7in Varsay\u0131lan Ayar<\/h3>\n<p>JavaScript&#8217;te bir de\u011fi\u015fkene varsay\u0131lan bir de\u011fer atamak i\u00e7in genellikle mant\u0131ksal OR operat\u00f6r\u00fc (<code>||<\/code>) kullan\u0131l\u0131r:<\/p>\n<pre><code class=\"language-javascript\">const varsayilanAd = \"Misafir\";\nconst kullaniciAdi = null;\nconst ad = kullaniciAdi || varsayilanAd;\nconsole.log(ad); \/\/ Misafir\n\nconst sifirSayisi = 0;\nconst varsayilanSayi = 100;\nconst sonuc = sifirSayisi || varsayilanSayi;\nconsole.log(sonuc); \/\/ 100 - Bu beklenen davran\u0131\u015f olmayabilir!<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>sifirSayisi<\/code> de\u011fi\u015fkeninin de\u011feri <code>0<\/code> olmas\u0131na ra\u011fmen, <code>||<\/code> operat\u00f6r\u00fc <code>0<\/code>&#8216;\u0131 &#8220;falsy&#8221; bir de\u011fer olarak de\u011ferlendirdi\u011fi i\u00e7in <code>varsayilanSayi<\/code> olan <code>100<\/code> atanm\u0131\u015ft\u0131r. Ancak bazen <code>0<\/code> veya bo\u015f bir string (<code>''<\/code>) gibi &#8220;falsy&#8221; de\u011ferlerin asl\u0131nda ge\u00e7erli de\u011ferler olmas\u0131n\u0131 ve sadece <code>null<\/code> veya <code>undefined<\/code> oldu\u011funda varsay\u0131lan de\u011fere d\u00fc\u015f\u00fclmesini isteriz.<\/p>\n<p>ES2020 ile gelen Nullish Coalescing Operator (<code>??<\/code>), bu durumu ele almak i\u00e7in tasarlanm\u0131\u015ft\u0131r. <code>??<\/code> operat\u00f6r\u00fc, sol taraf\u0131ndaki de\u011fer <code>null<\/code> veya <code>undefined<\/code> ise sa\u011f taraf\u0131ndaki de\u011feri d\u00f6nd\u00fcr\u00fcr; aksi takdirde sol taraf\u0131ndaki de\u011feri d\u00f6nd\u00fcr\u00fcr.<\/p>\n<h4>Nullish Coalescing Operator Nas\u0131l Kullan\u0131l\u0131r?<\/h4>\n<pre><code class=\"language-javascript\">const varsayilanAd = \"Misafir\";\nconst kullaniciAdi = null;\nconst ad = kullaniciAdi ?? varsayilanAd;\nconsole.log(ad); \/\/ Misafir\n\nconst sifirSayisi = 0;\nconst varsayilanSayi = 100;\nconst sonuc = sifirSayisi ?? varsayilanSayi;\nconsole.log(sonuc); \/\/ 0 - Do\u011fru davran\u0131\u015f!\n\nconst bosString = '';\nconst varsayilanDeger = 'Varsay\u0131lan';\nconst c = bosString ?? varsayilanDeger;\nconsole.log(c); \/\/ '' - Do\u011fru davran\u0131\u015f!\n\nconst tanimlanmamis = undefined;\nconst d = tanimlanmamis ?? 'Varsay\u0131lan';\nconsole.log(d); \/\/ Varsay\u0131lan<\/code><\/pre>\n<p><code>??<\/code> operat\u00f6r\u00fc, <code>||<\/code> operat\u00f6r\u00fcne k\u0131yasla daha hassas bir varsay\u0131lan de\u011fer atama mekanizmas\u0131 sunar. Yaln\u0131zca sol taraf\u0131n <code>null<\/code> veya <code>undefined<\/code> olmas\u0131 durumunda varsay\u0131lan de\u011fere d\u00fc\u015f\u00fclmesini istedi\u011finizde <code>??<\/code> kullanmal\u0131s\u0131n\u0131z. Bu, \u00f6zellikle yap\u0131land\u0131rma nesneleri, kullan\u0131c\u0131 girdileri veya API yan\u0131tlar\u0131 gibi durumlarda, <code>0<\/code> veya bo\u015f string gibi ge\u00e7erli &#8220;falsy&#8221; de\u011ferlerin yanl\u0131\u015fl\u0131kla varsay\u0131lan de\u011ferlerle de\u011fi\u015ftirilmesini \u00f6nler.<\/p>\n<h3>Dynamic Import (<code>import()<\/code>): Mod\u00fclleri Ko\u015fullu ve Tembel Y\u00fckleme<\/h3>\n<p>ES Mod\u00fclleri (<code>import<\/code> ve <code>export<\/code> ifadeleri), JavaScript&#8217;e mod\u00fclerlik getirerek kodun daha d\u00fczenli ve yeniden kullan\u0131labilir olmas\u0131n\u0131 sa\u011flam\u0131\u015ft\u0131r. Ancak, <code>import<\/code> ifadeleri statiktir; yani, kodun en ba\u015f\u0131nda belirtilmeli ve \u00e7al\u0131\u015fma zaman\u0131nda ko\u015fullu olarak y\u00fcklenemezler. Bu durum, baz\u0131 senaryolarda performans veya esneklik a\u00e7\u0131s\u0131ndan k\u0131s\u0131tlamalar yaratabilir. \u00d6rne\u011fin, b\u00fcy\u00fck bir k\u00fct\u00fcphaneyi yaln\u0131zca belirli bir kullan\u0131c\u0131 eylemi ger\u00e7ekle\u015fti\u011finde y\u00fcklemek isteyebilirsiniz.<\/p>\n<p>ES2020 ile gelen dinamik <code>import()<\/code> fonksiyonu, mod\u00fclleri \u00e7al\u0131\u015fma zaman\u0131nda, ko\u015fullu olarak ve asenkron bir \u015fekilde y\u00fcklememizi sa\u011flar. <code>import()<\/code> bir Promise d\u00f6nd\u00fcr\u00fcr ve bu Promise, mod\u00fcl\u00fcn tamam\u0131n\u0131 i\u00e7eren bir mod\u00fcl nesnesi ile \u00e7\u00f6z\u00fcl\u00fcr.<\/p>\n<h4>Dynamic Import Nas\u0131l Kullan\u0131l\u0131r?<\/h4>\n<pre><code class=\"language-javascript\">\/\/ myModule.js\nexport const sayHello = (name) => console.log(<code>Merhaba, ${name}!<\/code>);\nexport const calculateSum = (a, b) => a + b;\n\n\/\/ app.js\nconst button = document.getElementById('yukleButton');\n\nbutton.addEventListener('click', () => {\n  \/\/ Kullan\u0131c\u0131 butona t\u0131klad\u0131\u011f\u0131nda myModule'\u00fc dinamik olarak y\u00fckle\n  import('.\/myModule.js')\n    .then((module) => {\n      module.sayHello('D\u00fcnya'); \/\/ Merhaba, D\u00fcnya!\n      console.log(module.calculateSum(5, 7)); \/\/ 12\n    })\n    .catch((err) => {\n      console.error('Mod\u00fcl y\u00fcklenirken hata olu\u015ftu:', err);\n    });\n});\n\n\/\/ Veya async\/await ile:\nasync function yukleVeKullan() {\n  if (true) { \/\/ Bir ko\u015fula ba\u011fl\u0131 olarak\n    const module = await import('.\/myModule.js');\n    module.sayHello('Kullan\u0131c\u0131');\n  }\n}\n\/\/ yukleVeKullan(); \/\/ \u00c7a\u011fr\u0131ld\u0131\u011f\u0131nda y\u00fcklenecek<\/code><\/pre>\n<p>Dinamik <code>import()<\/code>&#8216;un ana faydalar\u0131 \u015funlard\u0131r:<br \/>\n*   <strong>Tembel Y\u00fckleme (Lazy Loading):<\/strong> Bir mod\u00fcl\u00fc yaln\u0131zca ger\u00e7ekten ihtiya\u00e7 duyuldu\u011funda y\u00fckleyerek uygulaman\u0131n ba\u015flang\u0131\u00e7 performans\u0131n\u0131 art\u0131r\u0131r. Bu, \u00f6zellikle b\u00fcy\u00fck JavaScript paketlerine sahip tek sayfa uygulamalar\u0131 (SPA) i\u00e7in \u00f6nemlidir.<br \/>\n*   <strong>Ko\u015fullu Y\u00fckleme:<\/strong> Bir mod\u00fcl\u00fc belirli bir ko\u015fulun kar\u015f\u0131lanmas\u0131 durumunda y\u00fckleyebiliriz. \u00d6rne\u011fin, kullan\u0131c\u0131n\u0131n belirli bir yetkiye sahip olup olmad\u0131\u011f\u0131na veya belirli bir cihazda olup olmad\u0131\u011f\u0131na g\u00f6re farkl\u0131 mod\u00fcller y\u00fckleyebiliriz.<br \/>\n*   <strong>Mod\u00fcl Ad\u0131n\u0131 \u00c7al\u0131\u015fma Zaman\u0131nda Belirleme:<\/strong> <code>import()<\/code> fonksiyonuna ge\u00e7irilen mod\u00fcl yolu bir de\u011fi\u015fken olabilir, bu da daha esnek mod\u00fcl y\u00f6netimi sa\u011flar.<\/p>\n<p>Bu \u00f6zellik, modern web uygulamalar\u0131n\u0131n performans\u0131n\u0131 ve esnekli\u011fini optimize etmek i\u00e7in kritik bir ara\u00e7t\u0131r.<\/p>\n<h3>String.prototype.matchAll(): Regex E\u015fle\u015fmelerini Tekrarlamak<\/h3>\n<p>JavaScript&#8217;in <code>String.prototype.match()<\/code> metodu, bir string i\u00e7inde bir d\u00fczenli ifade (regex) ile e\u015fle\u015fmeleri bulmak i\u00e7in kullan\u0131l\u0131r. Ancak, global (<code>g<\/code>) bayra\u011f\u0131yla kullan\u0131ld\u0131\u011f\u0131nda bile, <code>match()<\/code> metodu yaln\u0131zca t\u00fcm e\u015fle\u015fen stringleri bir dizi olarak d\u00f6nd\u00fcr\u00fcr ve her bir e\u015fle\u015fmenin yakalama gruplar\u0131 (capture groups) hakk\u0131nda detayl\u0131 bilgi sa\u011flamaz (ilk e\u015fle\u015fme hari\u00e7). Yakalama gruplar\u0131na eri\u015fmek i\u00e7in genellikle bir d\u00f6ng\u00fc i\u00e7inde <code>RegExp.prototype.exec()<\/code> metodunu kullanmak veya daha karma\u015f\u0131k mant\u0131k yazmak gerekirdi.<\/p>\n<p>ES2020 ile gelen <code>String.prototype.matchAll()<\/code>, bu s\u00fcreci b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirir. <code>matchAll()<\/code> metodu, bir string i\u00e7indeki t\u00fcm e\u015fle\u015fmeleri ve bunlar\u0131n yakalama gruplar\u0131n\u0131 i\u00e7eren bir iterator d\u00f6nd\u00fcr\u00fcr. Bu iterator, <code>for...of<\/code> d\u00f6ng\u00fcs\u00fc ile kolayca kullan\u0131labilir.<\/p>\n<p><strong>\u00d6nemli:<\/strong> <code>matchAll()<\/code> metodunun do\u011fru \u00e7al\u0131\u015fmas\u0131 i\u00e7in, kullan\u0131lan d\u00fczenli ifadenin global (<code>g<\/code>) bayra\u011f\u0131na sahip olmas\u0131 <strong>zorunludur<\/strong>. Aksi takdirde bir <code>TypeError<\/code> hatas\u0131 atar.<\/p>\n<h4>String.prototype.matchAll() Nas\u0131l Kullan\u0131l\u0131r?<\/h4>\n<pre><code class=\"language-javascript\">const metin = \"JavaScript, ECMAScript'in bir uygulamas\u0131d\u0131r. ECMAScript standartt\u0131r.\";\nconst regex = \/ECMAScript(.*?)(standartt\u0131r)?\/g; \/\/ Global bayra\u011f\u0131na dikkat!\n\nconst eslesmeler = metin.matchAll(regex);\n\nfor (const eslesme of eslesmeler) {\n  console.log(<code>Tam e\u015fle\u015fme: ${eslesme[0]}<\/code>);\n  console.log(<code>Yakalanan grup 1: ${eslesme[1]}<\/code>); \/\/ (.*?) k\u0131sm\u0131\n  console.log(<code>Yakalanan grup 2: ${eslesme[2]}<\/code>); \/\/ (standartt\u0131r)? k\u0131sm\u0131\n  console.log(<code>Index: ${eslesme.index}<\/code>);\n  console.log(<code>Input: ${eslesme.input}<\/code>);\n  console.log('---');\n}\n\n\/\/ \u00c7\u0131kt\u0131:\n\/\/ Tam e\u015fle\u015fme: ECMAScript'in\n\/\/ Yakalanan grup 1: 'in\n\/\/ Yakalanan grup 2: undefined\n\/\/ Index: 12\n\/\/ Input: JavaScript, ECMAScript'in bir uygulamas\u0131d\u0131r. ECMAScript standartt\u0131r.\n\/\/ ---\n\/\/ Tam e\u015fle\u015fme: ECMAScript standartt\u0131r\n\/\/ Yakalanan grup 1:\n\/\/ Yakalanan grup 2: standartt\u0131r\n\/\/ Index: 43\n\/\/ Input: JavaScript, ECMAScript'in bir uygulamas\u0131d\u0131r. ECMAScript standartt\u0131r.\n\/\/ ---<\/code><\/pre>\n<p>Her bir <code>eslesme<\/code> \u00f6\u011fesi, <code>RegExp.prototype.exec()<\/code> taraf\u0131ndan d\u00f6nd\u00fcr\u00fclen dizi benzeri bir nesnedir. Bu nesne, tam e\u015fle\u015fmeyi (index 0), yakalama gruplar\u0131n\u0131 (index 1, 2, &#8230;) ve <code>index<\/code> (e\u015fle\u015fmenin ba\u015flang\u0131\u00e7 konumu) ile <code>input<\/code> (orijinal string) \u00f6zelliklerini i\u00e7erir.<\/p>\n<p><code>matchAll()<\/code>, \u00f6zellikle karma\u015f\u0131k metin ayr\u0131\u015ft\u0131rma i\u015flemleri yaparken, birden fazla yakalama grubu i\u00e7eren regex&#8217;lerle \u00e7al\u0131\u015f\u0131rken ve t\u00fcm e\u015fle\u015fmelerin detayl\u0131 bilgilerine ihtiya\u00e7 duyuldu\u011funda b\u00fcy\u00fck kolayl\u0131k sa\u011flar. Kodun daha temiz ve daha anla\u015f\u0131l\u0131r olmas\u0131na yard\u0131mc\u0131 olur.<\/p>\n<h3>Di\u011fer K\u00fc\u00e7\u00fck Ama \u00d6nemli \u00d6zellikler<\/h3>\n<p>ES2020 sadece yukar\u0131da bahsedilen b\u00fcy\u00fck \u00f6zelliklerle s\u0131n\u0131rl\u0131 de\u011fildir; ayn\u0131 zamanda geli\u015ftirici deneyimini iyile\u015ftiren birka\u00e7 k\u00fc\u00e7\u00fck ama \u00f6nemli de\u011fi\u015fiklik de i\u00e7erir:<\/p>\n<h4>for-in S\u0131ralama Garantisi<\/h4>\n<p>Daha \u00f6nceki ECMAScript s\u00fcr\u00fcmlerinde, <code>for...in<\/code> d\u00f6ng\u00fcs\u00fcn\u00fcn nesne \u00f6zelliklerini hangi s\u0131rada yineleyece\u011fi tam olarak belirtilmemi\u015fti. Taray\u0131c\u0131lar ve JavaScript motorlar\u0131 aras\u0131nda farkl\u0131l\u0131klar olabiliyordu. ES2020 ile birlikte, <code>for...in<\/code> d\u00f6ng\u00fcs\u00fcn\u00fcn s\u0131ralamas\u0131 art\u0131k resmi olarak standardize edilmi\u015ftir. Bu, farkl\u0131 JavaScript ortamlar\u0131nda daha tutarl\u0131 davran\u0131\u015f sa\u011flar ve beklenmedik s\u0131ralama sorunlar\u0131n\u0131 azalt\u0131r.<\/p>\n<h4>export * as namespace from &#8216;module&#8217;<\/h4>\n<p>Bu \u00f6zellik, mod\u00fclleri yeniden d\u0131\u015fa aktarman\u0131n daha k\u0131sa ve okunabilir bir yolunu sunar. Daha \u00f6nce bir mod\u00fcl\u00fcn t\u00fcm d\u0131\u015fa aktar\u0131mlar\u0131n\u0131 ba\u015fka bir mod\u00fcl alt\u0131nda yeniden d\u0131\u015fa aktarmak i\u00e7in a\u015fa\u011f\u0131daki gibi bir s\u00f6zdizimi kullan\u0131l\u0131yordu:<\/p>\n<pre><code class=\"language-javascript\">\/\/ Eski y\u00f6ntem\nimport * as myModule from '.\/myModule.js';\nexport { myModule };<\/code><\/pre>\n<p>ES2020 ile bu i\u015flem tek bir sat\u0131rda yap\u0131labilir:<\/p>\n<pre><code class=\"language-javascript\">\/\/ Yeni y\u00f6ntem\nexport * as myModule from '.\/myModule.js';<\/code><\/pre>\n<p>Bu, mod\u00fcl yeniden d\u0131\u015fa aktarma (re-export) i\u015flemlerini basitle\u015ftirir ve \u00f6zellikle b\u00fcy\u00fck projelerde veya k\u00fct\u00fcphane geli\u015ftirirken kodun daha d\u00fczenli olmas\u0131na yard\u0131mc\u0131 olur.<\/p>\n<h3>ES2020&#8217;nin Geli\u015ftirici Deneyimine Etkisi<\/h3>\n<p>ES2020&#8217;nin getirdi\u011fi t\u00fcm bu \u00f6zellikler, JavaScript geli\u015ftiricileri i\u00e7in \u00f6nemli faydalar sunar:<\/p>\n<p>*   <strong>Daha G\u00fcvenli Kod:<\/strong> Optional Chaining ve Nullish Coalescing Operator, <code>null<\/code> veya <code>undefined<\/code> kaynakl\u0131 hatalar\u0131 azaltarak kodun daha sa\u011flam olmas\u0131n\u0131 sa\u011flar. <code>BigInt<\/code> ise b\u00fcy\u00fck say\u0131larla \u00e7al\u0131\u015f\u0131rken veri kayb\u0131n\u0131 \u00f6nler.<br \/>\n*   <strong>Daha Okunabilir ve Temiz Kod:<\/strong> Bu yeni operat\u00f6rler ve s\u00f6zdizimleri, \u00f6zellikle ko\u015fullu kontroller ve varsay\u0131lan de\u011fer atamalar\u0131 gibi yayg\u0131n g\u00f6revleri yerine getirirken, daha az boilerplate kodu yaz\u0131lmas\u0131n\u0131 ve kodun daha anla\u015f\u0131l\u0131r olmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>Performans \u0130yile\u015ftirmeleri:<\/strong> Dinamik <code>import()<\/code> ile mod\u00fcllerin tembel y\u00fcklenmesi, \u00f6zellikle b\u00fcy\u00fck uygulamalarda ba\u015flang\u0131\u00e7 s\u00fcresini ve kaynak kullan\u0131m\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azaltabilir.<br \/>\n*   <strong>Daha Esnek Uygulamalar:<\/strong> Dinamik <code>import()<\/code> ve <code>Promise.allSettled()<\/code>, uygulaman\u0131n davran\u0131\u015f\u0131n\u0131 \u00e7al\u0131\u015fma zaman\u0131nda daha iyi kontrol etme ve hata durumlar\u0131n\u0131 daha zarif bir \u015fekilde y\u00f6netme yetene\u011fi sunar.<br \/>\n*   <strong>Ortamlar Aras\u0131 Tutarl\u0131l\u0131k:<\/strong> <code>globalThis<\/code>, farkl\u0131 JavaScript \u00e7al\u0131\u015fma ortamlar\u0131nda global nesneye eri\u015fim i\u00e7in tek ve standart bir yol sa\u011flayarak evrensel kod yazmay\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<p>Bu yenilikler, JavaScript&#8217;i modern web geli\u015ftirmenin taleplerini kar\u015f\u0131lamak i\u00e7in daha yetenekli ve keyifli bir dil haline getirmektedir.<\/p>\n<h3>Taray\u0131c\u0131 ve Ortam Deste\u011fi<\/h3>\n<p>ES2020 \u00f6zellikleri, modern taray\u0131c\u0131lar\u0131n ve Node.js gibi \u00e7al\u0131\u015fma zamanlar\u0131n\u0131n g\u00fcncel s\u00fcr\u00fcmlerinde geni\u015f \u00f6l\u00e7\u00fcde desteklenmektedir. Ancak, eski taray\u0131c\u0131lar\u0131 veya \u00e7al\u0131\u015fma zamanlar\u0131n\u0131 hedefleyen projelerde, bu yeni \u00f6zellikleri do\u011frudan kullanmak yerine Babel gibi bir transpiler kullanarak kodu eski s\u00fcr\u00fcmlerle uyumlu hale getirmek gerekebilir. Geli\u015ftiricilerin, kulland\u0131klar\u0131 ortamlar\u0131n ES2020 \u00f6zelliklerini destekleyip desteklemedi\u011fini kontrol etmeleri her zaman iyi bir uygulamad\u0131r. Can I use&#8230; gibi kaynaklar, \u00f6zellik deste\u011fi hakk\u0131nda g\u00fcncel bilgiler sunar.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>ES2020, JavaScript&#8217;in evriminde \u00f6nemli bir ad\u0131m\u0131 temsil etmektedir. <code>BigInt<\/code> ile b\u00fcy\u00fck tam say\u0131larla g\u00fcvenli \u00e7al\u0131\u015fma, <code>Promise.allSettled()<\/code> ile Promise y\u00f6netiminde esneklik, <code>globalThis<\/code> ile standardize edilmi\u015f global eri\u015fim, Optional Chaining (<code>?.<\/code>) ve Nullish Coalescing Operator (<code>??<\/code>) ile daha temiz ve hatas\u0131z kod yazma, dinamik <code>import()<\/code> ile performans optimizasyonu ve <code>String.prototype.matchAll()<\/code> ile regex i\u015flemlerinde kolayl\u0131k gibi \u00f6zellikler, geli\u015ftiricilerin daha modern, verimli ve sa\u011flam uygulamalar olu\u015fturmas\u0131na yard\u0131mc\u0131 olmaktad\u0131r.<\/p>\n<p>Bu yeni \u00f6zellikler, JavaScript&#8217;in g\u00fcc\u00fcn\u00fc ve ifade yetene\u011fini art\u0131rarak, dili hem yeni ba\u015flayanlar hem de deneyimli profesyoneller i\u00e7in daha cazip hale getirmektedir. Modern JavaScript geli\u015ftiricileri olarak, bu ara\u00e7lar\u0131 \u00f6\u011frenmek ve projelerimizde uygulamak, kod kalitemizi ve geli\u015ftirme verimlili\u011fimizi art\u0131rmak i\u00e7in kritik \u00f6neme sahiptir. ES2020&#8217;nin getirdi\u011fi yenilikleri ke\u015ffetmek ve projelerinizde kullanmaya ba\u015flamak, JavaScript yolculu\u011funuzda ileriye do\u011fru at\u0131lm\u0131\u015f b\u00fcy\u00fck bir ad\u0131m olacakt\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"ES2020: JavaScript&#8217;in Yeni Nesil \u00d6zelliklerini Ke\u015ffedin\nJavaScript, web geli\u015ftirmenin temel ta\u015f\u0131 olmaya devam ederken, her y\u0131l \u00e7\u0131kan yeni ECM","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[129],"tags":[],"class_list":{"0":"post-32654","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-javascript","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ES2020: JavaScript&#039;in Yeni Nesil \u00d6zelliklerini Ke\u015ffedin - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ES2020: JavaScript&#039;in Yeni Nesil \u00d6zelliklerini Ke\u015ffedin\" \/>\n<meta property=\"og:description\" content=\"ES2020: JavaScript&#039;in Yeni Nesil \u00d6zelliklerini Ke\u015ffedin JavaScript, web geli\u015ftirmenin temel ta\u015f\u0131 olmaya devam ederken, her y\u0131l \u00e7\u0131kan yeni ECM\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-24T06:41:05+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"ES2020: JavaScript&#8217;in Yeni Nesil \u00d6zelliklerini Ke\u015ffedin\",\"datePublished\":\"2025-10-24T06:41:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/\"},\"wordCount\":2529,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Javascript\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/\",\"name\":\"ES2020: JavaScript'in Yeni Nesil \u00d6zelliklerini Ke\u015ffedin - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-24T06:41:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ES2020: JavaScript&#8217;in Yeni Nesil \u00d6zelliklerini Ke\u015ffedin\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"ES2020: JavaScript'in Yeni Nesil \u00d6zelliklerini Ke\u015ffedin - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/","og_locale":"tr_TR","og_type":"article","og_title":"ES2020: JavaScript'in Yeni Nesil \u00d6zelliklerini Ke\u015ffedin","og_description":"ES2020: JavaScript'in Yeni Nesil \u00d6zelliklerini Ke\u015ffedin JavaScript, web geli\u015ftirmenin temel ta\u015f\u0131 olmaya devam ederken, her y\u0131l \u00e7\u0131kan yeni ECM","og_url":"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-24T06:41:05+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"17 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"ES2020: JavaScript&#8217;in Yeni Nesil \u00d6zelliklerini Ke\u015ffedin","datePublished":"2025-10-24T06:41:05+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/"},"wordCount":2529,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Javascript"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/","url":"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/","name":"ES2020: JavaScript'in Yeni Nesil \u00d6zelliklerini Ke\u015ffedin - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-24T06:41:05+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/es2020-javascriptin-yeni-nesil-ozelliklerini-kesfedin\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"ES2020: JavaScript&#8217;in Yeni Nesil \u00d6zelliklerini Ke\u015ffedin"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32654","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=32654"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32654\/revisions"}],"predecessor-version":[{"id":32655,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32654\/revisions\/32655"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32654"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32654"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}