{"id":35540,"date":"2025-11-30T23:40:39","date_gmt":"2025-11-30T20:40:39","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35540"},"modified":"2025-11-30T23:40:39","modified_gmt":"2025-11-30T20:40:39","slug":"javascriptte-sablon-dizilerini-anlamak","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/","title":{"rendered":"JavaScript&#8217;te \u015eablon Dizilerini Anlamak"},"content":{"rendered":"<p><body><\/p>\n<h2>JavaScript&#8217;te \u015eablon Dizilerini Anlamak<\/h2>\n<h3>Giri\u015f: Modern Dize Y\u00f6netimine Bir Bak\u0131\u015f<\/h3>\n<p>JavaScript, web geli\u015ftirmenin temel ta\u015flar\u0131ndan biri olarak s\u00fcrekli evrim ge\u00e7irmekte ve geli\u015ftiricilerin daha temiz, daha okunabilir ve daha verimli kod yazmas\u0131n\u0131 sa\u011flayacak yeni \u00f6zellikler sunmaktad\u0131r. Bu \u00f6zelliklerden biri de ECMAScript 2015 (ES6) ile tan\u0131t\u0131lan &#8220;\u015eablon Dizileri&#8221; (Template Literals) veya bazen &#8220;\u015eablon Dizgileri&#8221; olarak da an\u0131lan yap\u0131d\u0131r. Geleneksel dize olu\u015fturma ve birle\u015ftirme y\u00f6ntemlerine k\u0131yasla \u00e7ok daha esnek ve g\u00fc\u00e7l\u00fc bir alternatif sunan \u015fablon dizileri, \u00f6zellikle dinamik i\u00e7erik olu\u015fturma, \u00e7ok sat\u0131rl\u0131 metinler yazma ve dize i\u00e7inde de\u011fi\u015fkenleri kullanma gibi yayg\u0131n senaryolarda geli\u015ftiricilerin hayat\u0131n\u0131 kolayla\u015ft\u0131rm\u0131\u015ft\u0131r.<\/p>\n<p>\u015eablon dizileri, ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, belirli bir \u015fablonu takip ederek dizeler olu\u015fturmam\u0131z\u0131 sa\u011flayan \u00f6zel bir s\u00f6zdizimine sahiptir. Geleneksel y\u00f6ntemlerde kar\u015f\u0131la\u015f\u0131lan t\u0131rnak i\u015fareti karma\u015fas\u0131, sat\u0131r sonu sorunlar\u0131 ve de\u011fi\u015fken birle\u015ftirme zorluklar\u0131 gibi pek \u00e7ok s\u0131k\u0131nt\u0131y\u0131 ortadan kald\u0131r\u0131r. Bu makalede, \u015fablon dizilerinin temel kullan\u0131m\u0131ndan ba\u015flayarak, ifade yerle\u015ftirme, \u00e7ok sat\u0131rl\u0131 dizeler, etiketli \u015fablonlar (tagged templates) gibi geli\u015fmi\u015f \u00f6zelliklerine kadar t\u00fcm y\u00f6nlerini derinlemesine inceleyece\u011fiz. Amac\u0131m\u0131z, bu g\u00fc\u00e7l\u00fc arac\u0131n ne oldu\u011funu, nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 ve modern JavaScript geli\u015ftirmedeki \u00f6nemini kapsaml\u0131 bir \u015fekilde a\u00e7\u0131klamakt\u0131r.<\/p>\n<h3>\u015eablon Dizilerinin Temel Kullan\u0131m\u0131<\/h3>\n<p>\u015eablon dizileri, geleneksel tek t\u0131rnak (<code>'<\/code>) veya \u00e7ift t\u0131rnak (<code>\"<\/code>) yerine backtick (<code><code><\/code>) i\u015fareti kullan\u0131larak tan\u0131mlan\u0131r. Bu k\u00fc\u00e7\u00fck de\u011fi\u015fiklik, dizelerle \u00e7al\u0131\u015fma \u015feklimizde b\u00fcy\u00fck farklar yarat\u0131r.<\/p>\n<h4>Backtick (<\/code>) \u0130\u015fareti ile Tan\u0131mlama<\/h4>\n<p>Bir \u015fablon dizesi olu\u015fturmak i\u00e7in tek yapman\u0131z gereken, metninizi backtick i\u015faretleri aras\u0131na almakt\u0131r:<\/p>\n<pre><code class=\"language-javascript\">\nconst mesaj = <code>Merhaba d\u00fcnya!<\/code>;\nconsole.log(mesaj); \/\/ \u00c7\u0131kt\u0131: Merhaba d\u00fcnya!\n<\/code><\/pre>\n<p>Bu basit \u00f6rnek, geleneksel dizelerden pek farkl\u0131 g\u00f6r\u00fcnmese de, backtick i\u015faretinin sa\u011flad\u0131\u011f\u0131 as\u0131l g\u00fc\u00e7, sonraki b\u00f6l\u00fcmlerde ortaya \u00e7\u0131kacakt\u0131r.<\/p>\n<h4>\u00c7ok Sat\u0131rl\u0131 Dizeler (Multi-line Strings)<\/h4>\n<p>Geleneksel JavaScript&#8217;te \u00e7ok sat\u0131rl\u0131 bir dize olu\u015fturmak olduk\u00e7a zahmetliydi. Her sat\u0131r\u0131n sonuna bir ka\u00e7\u0131\u015f karakteri (<code>\\<\/code>) eklemek veya dize birle\u015ftirme operat\u00f6r\u00fcn\u00fc (<code>+<\/code>) kullanmak gerekiyordu. \u015eablon dizileri bu sorunu ortadan kald\u0131r\u0131r; metninizi backtick i\u00e7ine yazd\u0131\u011f\u0131n\u0131z gibi birden fazla sat\u0131ra yayabilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ Geleneksel y\u00f6ntem (zorlu)\nconst gelenekselCokSatirli = 'Bu ilk sat\u0131r.\\n' +\n                           'Bu ikinci sat\u0131r.\\n' +\n                           'Bu \u00fc\u00e7\u00fcnc\u00fc sat\u0131r.';\nconsole.log(gelenekselCokSatirli);\n\n\/\/ \u015eablon dizileri ile (kolay)\nconst sablonCokSatirli = <code>Bu ilk sat\u0131r.\nBu ikinci sat\u0131r.\nBu \u00fc\u00e7\u00fcnc\u00fc sat\u0131r.<\/code>;\nconsole.log(sablonCokSatirli);\n<\/code><\/pre>\n<p>Bu \u00f6zellik, \u00f6zellikle HTML par\u00e7alar\u0131, SQL sorgular\u0131 veya uzun metin bloklar\u0131 olu\u015ftururken kodun okunabilirli\u011fini ve yaz\u0131m kolayl\u0131\u011f\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<h4>\u0130fade Yerle\u015ftirme (Expression Interpolation)<\/h4>\n<p>\u015eablon dizilerinin en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biri, dize i\u00e7ine do\u011frudan JavaScript ifadelerini yerle\u015ftirebilme yetene\u011fidir. Bu, <code>${expression}<\/code> s\u00f6zdizimi kullan\u0131larak yap\u0131l\u0131r. <code>expression<\/code> yerine herhangi bir ge\u00e7erli JavaScript ifadesi yaz\u0131labilir.<\/p>\n<h5>De\u011fi\u015fken Yerle\u015ftirme<\/h5>\n<p>Dize i\u00e7ine de\u011fi\u015fken de\u011ferlerini eklemek art\u0131k \u00e7ok daha sezgiseldir:<\/p>\n<pre><code class=\"language-javascript\">\nconst ad = \"Ay\u015fe\";\nconst yas = 30;\n\nconst selamlama = <code>Merhaba, benim ad\u0131m ${ad} ve ben ${yas} ya\u015f\u0131nday\u0131m.<\/code>;\nconsole.log(selamlama); \/\/ \u00c7\u0131kt\u0131: Merhaba, benim ad\u0131m Ay\u015fe ve ben 30 ya\u015f\u0131nday\u0131m.\n<\/code><\/pre>\n<p>Geleneksel dize birle\u015ftirmede kullan\u0131lan <code>+<\/code> operat\u00f6r\u00fcyle kar\u015f\u0131la\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda, bu y\u00f6ntem \u00e7ok daha temiz ve okunabilirdir.<\/p>\n<h5>Aritmetik \u0130\u015flemler<\/h5>\n<p>Sadece de\u011fi\u015fkenler de\u011fil, dize i\u00e7inde basit aritmetik i\u015flemler de yapabilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">\nconst fiyat = 10;\nconst miktar = 3;\n\nconst toplam = <code>\u00dcr\u00fcnlerin toplam fiyat\u0131: ${fiyat * miktar} TL.<\/code>;\nconsole.log(toplam); \/\/ \u00c7\u0131kt\u0131: \u00dcr\u00fcnlerin toplam fiyat\u0131: 30 TL.\n<\/code><\/pre>\n<h5>Fonksiyon \u00c7a\u011fr\u0131lar\u0131<\/h5>\n<p>\u0130fade yerle\u015ftirme i\u00e7inde fonksiyon \u00e7a\u011fr\u0131lar\u0131 da yap\u0131labilir ve fonksiyonun d\u00f6nd\u00fcrd\u00fc\u011f\u00fc de\u011fer dizeye dahil edilir:<\/p>\n<pre><code class=\"language-javascript\">\nfunction adSoyadBirlestir(ad, soyad) {\n  return <code>${ad} ${soyad}<\/code>;\n}\n\nconst kullaniciAdi = <code>Ho\u015f geldiniz, ${adSoyadBirlestir(\"Mehmet\", \"Y\u0131lmaz\")}!<\/code>;\nconsole.log(kullaniciAdi); \/\/ \u00c7\u0131kt\u0131: Ho\u015f geldiniz, Mehmet Y\u0131lmaz!\n<\/code><\/pre>\n<h5>Ko\u015fullu \u0130fadeler (Ternary Operator)<\/h5>\n<p>Ko\u015fullu ifadeler (\u00fc\u00e7l\u00fc operat\u00f6r) kullanarak dize i\u00e7inde dinamik metin olu\u015fturmak da m\u00fcmk\u00fcnd\u00fcr:<\/p>\n<pre><code class=\"language-javascript\">\nconst stoktaVar = true;\nconst durumMesaji = <code>\u00dcr\u00fcn ${stoktaVar ? \"stokta mevcut\" : \"t\u00fckendi\"}.<\/code>;\nconsole.log(durumMesaji); \/\/ \u00c7\u0131kt\u0131: \u00dcr\u00fcn stokta mevcut.\n<\/code><\/pre>\n<h5>Nesne \u00d6zellikleri ve Array Elemanlar\u0131<\/h5>\n<p>Nesnelerin \u00f6zelliklerine veya dizilerin elemanlar\u0131na do\u011frudan eri\u015filebilir:<\/p>\n<pre><code class=\"language-javascript\">\nconst urun = { ad: \"Laptop\", marka: \"ABC\", fiyat: 1200 };\nconst sepet = [\"Elma\", \"Armut\"];\n\nconst urunBilgisi = <code>\u00dcr\u00fcn: ${urun.marka} ${urun.ad}, Fiyat: ${urun.fiyat} TL.<\/code>;\nconst sepetBilgisi = <code>Sepetinizdeki ilk \u00fcr\u00fcn: ${sepet[0]}.<\/code>;\n\nconsole.log(urunBilgisi);  \/\/ \u00c7\u0131kt\u0131: \u00dcr\u00fcn: ABC Laptop, Fiyat: 1200 TL.\nconsole.log(sepetBilgisi); \/\/ \u00c7\u0131kt\u0131: Sepetinizdeki ilk \u00fcr\u00fcn: Elma.\n<\/code><\/pre>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc gibi, <code>${}<\/code> yap\u0131s\u0131 i\u00e7ine yerle\u015ftirilebilecek ifadelerin s\u0131n\u0131r\u0131 yoktur, bu da \u015fablon dizilerini inan\u0131lmaz derecede esnek k\u0131lar.<\/p>\n<h3>Geleneksel Dizelerle Kar\u015f\u0131la\u015ft\u0131rma<\/h3>\n<p>\u015eablon dizilerinin avantajlar\u0131n\u0131 daha iyi anlamak i\u00e7in, geleneksel dize birle\u015ftirme y\u00f6ntemleriyle aralar\u0131ndaki farklar\u0131 incelemek faydal\u0131 olacakt\u0131r.<\/p>\n<h4><code>+<\/code> Operat\u00f6r\u00fc ile Dize Birle\u015ftirme<\/h4>\n<p>ES6 \u00f6ncesinde, dizeleri ve de\u011fi\u015fkenleri birle\u015ftirmek i\u00e7in genellikle <code>+<\/code> operat\u00f6r\u00fc kullan\u0131l\u0131rd\u0131:<\/p>\n<pre><code class=\"language-javascript\">\nconst ad = \"Zeynep\";\nconst yas = 25;\nconst meslek = \"M\u00fchendis\";\n\nconst bilgi = \"Merhaba, benim ad\u0131m \" + ad + \", \" + yas + \" ya\u015f\u0131nday\u0131m ve \" + meslek + \" olarak \u00e7al\u0131\u015f\u0131yorum.\";\nconsole.log(bilgi);\n<\/code><\/pre>\n<p>Bu y\u00f6ntem, \u00f6zellikle \u00e7ok say\u0131da de\u011fi\u015fken veya karma\u015f\u0131k bir metinle \u00e7al\u0131\u015f\u0131rken okunabilirli\u011fi ciddi \u015fekilde d\u00fc\u015f\u00fcr\u00fcr. T\u0131rnak i\u015faretleri ve <code>+<\/code> operat\u00f6rleri aras\u0131nda kaybolmak kolayd\u0131r. Ayr\u0131ca, \u00e7ok sat\u0131rl\u0131 dizeler olu\u015fturmak i\u00e7in her sat\u0131r\u0131n sonuna <code>\\n<\/code> eklemek veya her sat\u0131r\u0131 ayr\u0131 ayr\u0131 birle\u015ftirmek gerekiyordu, bu da kodu daha da karma\u015f\u0131k hale getiriyordu.<\/p>\n<h4><code>concat()<\/code> Metodu<\/h4>\n<p>JavaScript&#8217;in <code>String<\/code> prototipinde bulunan <code>concat()<\/code> metodu da dizeleri birle\u015ftirmek i\u00e7in kullan\u0131labilir:<\/p>\n<pre><code class=\"language-javascript\">\nconst ad = \"Deniz\";\nconst soyad = \"Can\";\nconst tamAd = ad.concat(\" \", soyad);\nconsole.log(tamAd); \/\/ \u00c7\u0131kt\u0131: Deniz Can\n<\/code><\/pre>\n<p>Bu y\u00f6ntem, <code>+<\/code> operat\u00f6r\u00fcne g\u00f6re biraz daha d\u00fczenli olsa da, yine de birden fazla de\u011fi\u015fkeni veya karma\u015f\u0131k bir metni birle\u015ftirirken \u015fablon dizilerinin sundu\u011fu esneklik ve okunabilirlikten yoksundur. \u00d6zellikle \u00e7ok say\u0131da arg\u00fcman\u0131 birle\u015ftirirken <code>concat()<\/code> \u00e7a\u011fr\u0131lar\u0131 i\u00e7 i\u00e7e ge\u00e7ebilir ve kodu yine karma\u015f\u0131k hale getirebilir.<\/p>\n<h4>Avantajlar: Okunabilirlik, Yaz\u0131m Kolayl\u0131\u011f\u0131, Hata Azaltma<\/h4>\n<p>\u015eablon dizileri, geleneksel y\u00f6ntemlere g\u00f6re belirgin avantajlar sunar:<\/p>\n<p>1.  <strong>Okunabilirlik:<\/strong> De\u011fi\u015fkenler ve ifadeler do\u011frudan dize i\u00e7ine yerle\u015ftirildi\u011fi i\u00e7in, dize yap\u0131s\u0131 \u00e7ok daha net ve anla\u015f\u0131l\u0131rd\u0131r. Kodun amac\u0131n\u0131 anlamak i\u00e7in <code>+<\/code> operat\u00f6rleri veya t\u0131rnak i\u015faretleri aras\u0131nda gezinmeye gerek kalmaz.<br \/>\n2.  <strong>Yaz\u0131m Kolayl\u0131\u011f\u0131:<\/strong> \u00d6zellikle \u00e7ok sat\u0131rl\u0131 dizeler ve birden fazla de\u011fi\u015fken i\u00e7eren dizeler i\u00e7in yaz\u0131m s\u00fcresini ve \u00e7abas\u0131n\u0131 azalt\u0131r. Ka\u00e7\u0131\u015f karakterleri veya s\u00fcrekli <code>+<\/code> operat\u00f6r\u00fc kullanma ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r.<br \/>\n3.  <strong>Hata Azaltma:<\/strong> T\u0131rnak i\u015faretlerini yanl\u0131\u015f yerle\u015ftirme veya <code>+<\/code> operat\u00f6r\u00fcn\u00fc unutma gibi yayg\u0131n hatalar\u0131n \u00f6n\u00fcne ge\u00e7er. Yaz\u0131m hatalar\u0131n\u0131 azaltarak geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131r.<br \/>\n4.  <strong>Esneklik:<\/strong> \u0130fade yerle\u015ftirme \u00f6zelli\u011fi sayesinde, dize i\u00e7inde sadece de\u011fi\u015fkenleri de\u011fil, ayn\u0131 zamanda fonksiyon \u00e7a\u011fr\u0131lar\u0131n\u0131, aritmetik i\u015flemleri ve ko\u015fullu ifadeleri de kullanabilirsiniz.<\/p>\n<p>Bu avantajlar, \u015fablon dizilerini modern JavaScript geli\u015ftirme i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline getirmi\u015ftir.<\/p>\n<h3>Etiketli \u015eablonlar (Tagged Templates)<\/h3>\n<p>\u015eablon dizilerinin belki de en geli\u015fmi\u015f ve g\u00fc\u00e7l\u00fc \u00f6zelli\u011fi &#8220;etiketli \u015fablonlar&#8221;d\u0131r. Etiketli \u015fablonlar, bir fonksiyonun bir \u015fablon dizesini i\u015flemesine olanak tan\u0131r. Bu, dizeyi olu\u015fturmadan \u00f6nce veya olu\u015fturulduktan sonra \u00fczerinde \u00f6zel i\u015flemler yapmam\u0131z\u0131 sa\u011flar.<\/p>\n<h4>Nedir ve Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h4>\n<p>Etiketli \u015fablonlar, bir \u015fablon dizesinin \u00f6n\u00fcne bir fonksiyon ad\u0131n\u0131 (etiket) ekleyerek kullan\u0131l\u0131r. Etiket fonksiyonu, \u015fablon dizesini ayr\u0131\u015ft\u0131r\u0131r ve dize par\u00e7alar\u0131 ile yerle\u015ftirilen ifadelerin de\u011ferlerini ayr\u0131 ayr\u0131 arg\u00fcmanlar olarak al\u0131r.<\/p>\n<p>S\u00f6zdizimi \u015fu \u015fekildedir: <code>etiketFonksiyonu<\/code> <code>dize metni ${ifade1} dize metni ${ifade2} ...<\/code><\/p>\n<p><code>etiketFonksiyonu<\/code> a\u015fa\u011f\u0131daki arg\u00fcmanlar\u0131 al\u0131r:<br \/>\n1.  <strong><code>strings<\/code> (Dizeler):<\/strong> Bu, \u015fablon dizesinin statik dize par\u00e7alar\u0131n\u0131 i\u00e7eren bir dizidir. Her zaman ilk arg\u00fcmand\u0131r ve bir <code>Array<\/code> tipindedir. Bu dizi, yerle\u015ftirilen ifadelerin aras\u0131na giren t\u00fcm metinleri i\u00e7erir.<br \/>\n2.  <strong><code>...values<\/code> (De\u011ferler):<\/strong> Bu, \u015fablon dizesindeki <code>${}<\/code> i\u00e7ine yerle\u015ftirilen t\u00fcm ifadelerin de\u011ferlendirilmi\u015f de\u011ferleridir. Bunlar, <code>strings<\/code> dizisinden sonraki arg\u00fcmanlar olarak gelir.<\/p>\n<p>\u00d6rnek bir etiket fonksiyonu tan\u0131m\u0131 \u015f\u00f6yle olabilir:<\/p>\n<pre><code class=\"language-javascript\">\nfunction benimEtiketim(strings, ...values) {\n  \/\/ strings: [\"Merhaba \", \", bug\u00fcn hava \", \" ve saat \", \"!\", raw: Array(4)]\n  \/\/ values: [\"Ahmet\", \"g\u00fcne\u015fli\", \"14:30\"]\n  console.log(strings);\n  console.log(values);\n\n  let sonuc = \"\";\n  for (let i = 0; i < strings.length; i++) {\n    sonuc += strings[i];\n    if (i < values.length) {\n      sonuc += values[i];\n    }\n  }\n  return sonuc;\n}\n\nconst ad = \"Ahmet\";\nconst havaDurumu = \"g\u00fcne\u015fli\";\nconst saat = \"14:30\";\n\nconst mesaj = benimEtiketim<code>Merhaba ${ad}, bug\u00fcn hava ${havaDurumu} ve saat ${saat}!<\/code>;\nconsole.log(mesaj); \/\/ \u00c7\u0131kt\u0131: Merhaba Ahmet, bug\u00fcn hava g\u00fcne\u015fli ve saat 14:30!\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>benimEtiketim<\/code> fonksiyonu \u015fablon dizesini i\u015fleyerek ayn\u0131 \u00e7\u0131kt\u0131y\u0131 \u00fcretir. Ancak as\u0131l g\u00fc\u00e7, etiket fonksiyonunun dize par\u00e7alar\u0131n\u0131 ve de\u011ferleri ayr\u0131 ayr\u0131 manip\u00fcle edebilmesidir.<\/p>\n<h4>Kullan\u0131m Alanlar\u0131<\/h4>\n<p>Etiketli \u015fablonlar, \u00e7ok \u00e7e\u015fitli senaryolarda inan\u0131lmaz derecede faydal\u0131d\u0131r:<\/p>\n<h5>1. G\u00fcvenlik ve Ka\u00e7\u0131\u015f Karakterleri (Sanitizing)<\/h5>\n<p>Kullan\u0131c\u0131 taraf\u0131ndan girilen verileri do\u011frudan HTML&#8217;e veya SQL sorgular\u0131na yerle\u015ftirmek g\u00fcvenlik a\u00e7\u0131klar\u0131 (\u00f6rn. XSS, SQL Enjeksiyonu) yaratabilir. Etiketli \u015fablonlar, bu t\u00fcr verileri otomatik olarak ka\u00e7\u0131\u015f karakterlerine d\u00f6n\u00fc\u015ft\u00fcrmek veya filtrelemek i\u00e7in kullan\u0131labilir.<\/p>\n<pre><code class=\"language-javascript\">\nfunction htmlEscape(strings, ...values) {\n  let str = '';\n  strings.forEach((s, i) => {\n    str += s;\n    if (i < values.length) {\n      const val = String(values[i]); \/\/ De\u011feri string&#039;e \u00e7evir\n      str += val\n        .replace(\/&#038;\/g, &#039;&amp;&#039;)\n        .replace(\/<\/g, &#039;&lt;&#039;)\n        .replace(\/>\/g, '>')\n        .replace(\/\"\/g, '\"')\n        .replace(\/'\/g, '&#039;');\n    }\n  });\n  return str;\n}\n\nconst kullaniciYorumu = <code><script>alert('XSS Sald\u0131r\u0131s\u0131!')<\/script><\/code>;\nconst guvenliHTML = htmlEscape<code><div>${kullaniciYorumu}<\/div><\/code>;\nconsole.log(guvenliHTML);\n\/\/ \u00c7\u0131kt\u0131: <div><script>alert(&#039;XSS Sald\u0131r\u0131s\u0131!&#039;)<\/script><\/div>\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>htmlEscape<\/code> fonksiyonu, kullan\u0131c\u0131 yorumundaki zararl\u0131 karakterleri HTML varl\u0131klar\u0131na d\u00f6n\u00fc\u015ft\u00fcrerek XSS sald\u0131r\u0131lar\u0131n\u0131 \u00f6nler.<\/p>\n<h5>2. Uluslararas\u0131la\u015ft\u0131rma (i18n)<\/h5>\n<p>Etiketli \u015fablonlar, farkl\u0131 diller i\u00e7in metinleri bi\u00e7imlendirmek ve yerelle\u015ftirmek i\u00e7in kullan\u0131labilir. Bir etiket fonksiyonu, kullan\u0131c\u0131n\u0131n dil tercihine g\u00f6re metinleri \u00e7evirebilir veya tarih\/saat bi\u00e7imlerini ayarlayabilir.<\/p>\n<pre><code class=\"language-javascript\">\nfunction i18n(strings, ...values) {\n  \/\/ Bu basit bir \u00f6rnek, ger\u00e7ek bir i18n k\u00fct\u00fcphanesi \u00e7ok daha karma\u015f\u0131k olacakt\u0131r.\n  \/\/ Varsayal\u0131m ki bir \u00e7eviri mekanizmam\u0131z var.\n  const lang = 'en'; \/\/ Kullan\u0131c\u0131n\u0131n dilini buradan alal\u0131m\n\n  const translations = {\n    'tr': {\n      'Merhaba {0}, bug\u00fcn {1}.': 'Merhaba {0}, bug\u00fcn {1}.',\n      'Bug\u00fcn hava {0}.': 'Bug\u00fcn hava {0}.'\n    },\n    'en': {\n      'Merhaba {0}, bug\u00fcn {1}.': 'Hello {0}, today is {1}.',\n      'Bug\u00fcn hava {0}.': 'Today\\'s weather is {0}.'\n    }\n  };\n\n  let template = strings[0];\n  for (let i = 0; i < values.length; i++) {\n    template += <code>{${i}}<\/code> + strings[i + 1];\n  }\n\n  let translatedTemplate = translations[lang][template] || template;\n\n  \/\/ \u00c7evrilmi\u015f \u015fablonu de\u011ferlerle doldur\n  for (let i = 0; i < values.length; i++) {\n    translatedTemplate = translatedTemplate.replace(<code>{${i}}<\/code>, values[i]);\n  }\n\n  return translatedTemplate;\n}\n\nconst isim = \"Ay\u015fe\";\nconst gun = \"Pazartesi\";\n\nconsole.log(i18n<code>Merhaba ${isim}, bug\u00fcn ${gun}.<\/code>);\n\/\/ \u00c7\u0131kt\u0131 (lang='en' ise): Hello Ay\u015fe, today is Pazartesi.\n<\/code><\/pre>\n<p>Bu \u00f6rnek, ger\u00e7ek bir uluslararas\u0131la\u015ft\u0131rma sisteminin karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 tam olarak yans\u0131tmasa da, etiketli \u015fablonlar\u0131n bu alanda nas\u0131l bir ba\u015flang\u0131\u00e7 noktas\u0131 olabilece\u011fini g\u00f6stermektedir.<\/p>\n<h5>3. CSS-in-JS K\u00fct\u00fcphaneleri<\/h5>\n<p>React gibi modern \u00f6n u\u00e7 \u00e7er\u00e7evelerinde, bile\u015fenlere \u00f6zg\u00fc stiller tan\u0131mlamak i\u00e7in <code>styled-components<\/code> veya <code>emotion<\/code> gibi CSS-in-JS k\u00fct\u00fcphaneleri yayg\u0131n olarak kullan\u0131l\u0131r. Bu k\u00fct\u00fcphaneler, stilleri do\u011frudan JavaScript kodu i\u00e7inde tan\u0131mlamak i\u00e7in etiketli \u015fablonlardan faydalan\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ styled-components kullan\u0131m\u0131na benzer bir \u00f6rnek\nfunction styled(strings, ...values) {\n  \/\/ Bu fonksiyon, ger\u00e7ek bir k\u00fct\u00fcphanedeki gibi DOM elemanlar\u0131 olu\u015fturmayacak,\n  \/\/ sadece stil dizesini d\u00f6nd\u00fcrecektir.\n  let css = \"\";\n  strings.forEach((s, i) => {\n    css += s;\n    if (i < values.length) {\n      css += values[i];\n    }\n  });\n  return <code><style>${css}<\/style><\/code>;\n}\n\nconst renk = \"blue\";\nconst boyut = \"20px\";\n\nconst Button = styled<code>\n  background-color: ${renk};\n  font-size: ${boyut};\n  padding: 10px 15px;\n  border-radius: 5px;\n<\/code>;\n\nconsole.log(Button);\n\/* \u00c7\u0131kt\u0131:\n<style>\n  background-color: blue;\n  font-size: 20px;\n  padding: 10px 15px;\n  border-radius: 5px;\n<\/style>\n*\/\n<\/code><\/pre>\n<p>Bu, bile\u015fen tabanl\u0131 geli\u015ftirme yaparken stil y\u00f6netimini \u00e7ok daha dinamik ve esnek hale getirir.<\/p>\n<h5>4. \u00d6zel Dize \u0130\u015fleme ve Bi\u00e7imlendirme<\/h5>\n<p>Etiketli \u015fablonlar, herhangi bir \u00f6zel dize bi\u00e7imlendirme veya i\u015fleme ihtiyac\u0131 i\u00e7in kullan\u0131labilir. \u00d6rne\u011fin, bir dizeyi belirli bir formata d\u00f6n\u00fc\u015ft\u00fcrmek, belirli karakterleri \u00e7\u0131karmak veya dizeye \u00f6zel bir mant\u0131k uygulamak gibi.<\/p>\n<h3>Ham Dizeler (Raw Strings)<\/h3>\n<p>Etiketli \u015fablonlar ba\u011flam\u0131nda, <code>strings<\/code> dizisinin bir de <code>raw<\/code> \u00f6zelli\u011fi bulunur. Bu \u00f6zellik, ka\u00e7\u0131\u015f dizilerinin (\u00f6rne\u011fin <code>\\n<\/code> yeni sat\u0131r, <code>\\t<\/code> sekme) i\u015flenmemi\u015f, &#8220;ham&#8221; hallerini i\u00e7eren bir dizi d\u00f6nd\u00fcr\u00fcr. Normalde, JavaScript dize de\u011fi\u015fmezlerinde <code>\\n<\/code> gibi ka\u00e7\u0131\u015f dizileri yorumlan\u0131r ve ger\u00e7ek bir yeni sat\u0131r karakterine d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr. Ancak <code>String.raw<\/code> etiketi veya etiket fonksiyonunun <code>strings.raw<\/code> \u00f6zelli\u011fi, bu ka\u00e7\u0131\u015f dizilerini oldu\u011fu gibi korur.<\/p>\n<h4><code>String.raw<\/code> Etiketi<\/h4>\n<p><code>String.raw<\/code> etiketi, yerle\u015fik bir etiket fonksiyonudur ve \u015fablon dizesindeki t\u00fcm ka\u00e7\u0131\u015f dizilerini oldu\u011fu gibi d\u00f6nd\u00fcr\u00fcr. Bu, \u00f6zellikle d\u00fczenli ifadeler veya dosya yollar\u0131 gibi ka\u00e7\u0131\u015f dizilerinin \u00f6zel bir anlam ta\u015f\u0131d\u0131\u011f\u0131 durumlarda kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\nconst yol = <code>C:\\Users\\Kullanici\\Belgeler\\yeni\\dosya.txt<\/code>;\nconsole.log(yol);\n\/\/ \u00c7\u0131kt\u0131: C:UsersKullaniciBelgeler\n\/\/ yeni    dosya.txt (\u00c7\u00fcnk\u00fc \\U, \\K, \\B, \\y, \\d ka\u00e7\u0131\u015f dizisi olarak yorumlanabilir veya g\u00f6z ard\u0131 edilebilir)\n\nconst rawYol = String.raw<code>C:\\Users\\Kullanici\\Belgeler\\yeni\\dosya.txt<\/code>;\nconsole.log(rawYol);\n\/\/ \u00c7\u0131kt\u0131: C:\\Users\\Kullanici\\Belgeler\\yeni\\dosya.txt (Ka\u00e7\u0131\u015f dizileri oldu\u011fu gibi korunur)\n\nconst mesaj = String.raw<code>Merhaba\\nD\u00fcnya!<\/code>;\nconsole.log(mesaj); \/\/ \u00c7\u0131kt\u0131: Merhaba\\nD\u00fcnya! (Normalde \"Merhaba\\nD\u00fcnya!\" yeni sat\u0131rla yaz\u0131l\u0131rd\u0131)\n<\/code><\/pre>\n<p><code>String.raw<\/code> kullanmadan ayn\u0131 etkiyi elde etmek i\u00e7in her ters e\u011fik \u00e7izgi karakterini (<code>\\<\/code>) iki kez yazman\u0131z gerekirdi (<code>\\\\<\/code>). <code>String.raw<\/code>, bu t\u00fcr durumlar\u0131 basitle\u015ftirir.<\/p>\n<h4><code>strings.raw<\/code> \u00d6zelli\u011fi<\/h4>\n<p>Kendi etiket fonksiyonlar\u0131n\u0131z\u0131 yazarken, <code>strings<\/code> arg\u00fcman\u0131n\u0131n <code>raw<\/code> \u00f6zelli\u011fine eri\u015ferek de ham dize par\u00e7alar\u0131na ula\u015fabilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">\nfunction hamYazdir(strings, ...values) {\n  console.log('\u0130\u015flenmi\u015f dizeler:', strings);\n  console.log('Ham dizeler:', strings.raw);\n  return strings.raw.join(''); \/\/ Sadece ham dizeleri birle\u015ftir\n}\n\nhamYazdir<code>Birinci sat\u0131r\\n\u0130kinci sat\u0131r<\/code>;\n\/* \u00c7\u0131kt\u0131:\n\u0130\u015flenmi\u015f dizeler: [\"Birinci sat\u0131r\n\u0130kinci sat\u0131r\", raw: Array(2)]\nHam dizeler: [\"Birinci sat\u0131r\\n\", \"\u0130kinci sat\u0131r\", raw: Array(2)]\n*\/\n<\/code><\/pre>\n<p>Bu, \u00f6zellikle dil ayr\u0131\u015ft\u0131r\u0131c\u0131lar\u0131 veya \u00f6zel metin i\u015flemcileri olu\u015ftururken faydal\u0131 olabilir.<\/p>\n<h3>\u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/h3>\n<p>\u015eablon dizilerini kullan\u0131rken dikkat etmeniz gereken baz\u0131 ipu\u00e7lar\u0131 ve en iyi uygulamalar \u015funlard\u0131r:<\/p>\n<p>1.  <strong>Tutarl\u0131l\u0131k \u0130\u00e7in Her Zaman Backtick Kullan\u0131n:<\/strong> Projenizde tutarl\u0131l\u0131\u011f\u0131 sa\u011flamak ve gelecekteki olas\u0131 ihtiya\u00e7lar i\u00e7in haz\u0131rl\u0131kl\u0131 olmak ad\u0131na, basit dizeler i\u00e7in bile backtick kullanmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz. Bu, kodunuzu daha okunabilir ve esnek hale getirir.<br \/>\n2.  <strong>Karma\u015f\u0131k \u0130fadeleri Ayr\u0131 De\u011fi\u015fkenlere Atay\u0131n:<\/strong> <code> ${}<\/code> i\u00e7ine \u00e7ok karma\u015f\u0131k veya uzun ifadeler yazmaktan ka\u00e7\u0131n\u0131n. Bu, okunabilirli\u011fi d\u00fc\u015f\u00fcrebilir. E\u011fer bir ifade \u00e7ok karma\u015f\u0131ksa, onu ayr\u0131 bir de\u011fi\u015fkende hesaplay\u0131p sonra bu de\u011fi\u015fkeni \u015fablon dizesine yerle\u015ftirin.<br \/>\n3.  <strong>Okunabilirlik \u0130\u00e7in Girinti Kullan\u0131n:<\/strong> \u00c7ok sat\u0131rl\u0131 \u015fablon dizileri kullan\u0131rken, \u00f6zellikle HTML veya SQL gibi yap\u0131sal metinler olu\u015ftururken uygun girintileme kullan\u0131n. Bu, kodunuzun anla\u015f\u0131l\u0131rl\u0131\u011f\u0131n\u0131 art\u0131r\u0131r.<br \/>\n4.  <strong>Etiketli \u015eablonlar\u0131 Dikkatli Kullan\u0131n:<\/strong> Etiketli \u015fablonlar g\u00fc\u00e7l\u00fcd\u00fcr ancak her zaman gerekli de\u011fildir. Sadece dize i\u015fleme mant\u0131\u011f\u0131na ihtiyac\u0131n\u0131z oldu\u011funda kullan\u0131n. A\u015f\u0131r\u0131 kullan\u0131m, kodu gereksiz yere karma\u015f\u0131k hale getirebilir.<br \/>\n5.  <strong>G\u00fcvenlik Konular\u0131n\u0131 G\u00f6z \u00d6n\u00fcnde Bulundurun:<\/strong> Kullan\u0131c\u0131 taraf\u0131ndan sa\u011flanan verileri etiketli \u015fablonlar arac\u0131l\u0131\u011f\u0131yla i\u015flerken, g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 \u00f6nlemek i\u00e7in daima gerekli sanitizasyon veya ka\u00e7\u0131\u015f i\u015flemlerini uygulay\u0131n.<\/p>\n<h3>S\u0131n\u0131rlamalar ve Dikkat Edilmesi Gerekenler<\/h3>\n<p>\u015eablon dizileri olduk\u00e7a g\u00fc\u00e7l\u00fc olsa da, baz\u0131 s\u0131n\u0131rlamalar\u0131 ve dikkat edilmesi gereken noktalar\u0131 vard\u0131r:<\/p>\n<p>1.  <strong>Performans:<\/strong> \u00c7o\u011fu modern JavaScript motoru \u015fablon dizilerini optimize etmi\u015ftir ve genellikle performans \u00fczerinde g\u00f6zle g\u00f6r\u00fcl\u00fcr bir etkisi olmaz. Ancak, a\u015f\u0131r\u0131 b\u00fcy\u00fck dizeler veya \u00e7ok say\u0131da karma\u015f\u0131k ifade i\u00e7eren \u015fablon dizileriyle \u00e7al\u0131\u015f\u0131rken, \u00f6zellikle performans kritik uygulamalarda k\u00fc\u00e7\u00fck bir overhead (ek y\u00fck) olabilir. \u00c7o\u011fu durumda bu endi\u015fe edilecek bir durum de\u011fildir.<br \/>\n2.  <strong>Taray\u0131c\u0131 Deste\u011fi:<\/strong> \u015eablon dizileri ES6 (ECMAScript 2015) ile tan\u0131t\u0131lm\u0131\u015ft\u0131r. Bu, eski taray\u0131c\u0131lar\u0131n (\u00f6rn. Internet Explorer 11) do\u011frudan desteklemedi\u011fi anlam\u0131na gelir. Ancak, modern web geli\u015ftirme s\u00fcre\u00e7lerinde Babel gibi ara\u00e7lar kullan\u0131larak ES6 kodu eski taray\u0131c\u0131larda \u00e7al\u0131\u015facak \u015fekilde d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr (transpiled), bu da bu sorunu b\u00fcy\u00fck \u00f6l\u00e7\u00fcde ortadan kald\u0131r\u0131r.<br \/>\n3.  <strong>Karma\u015f\u0131k Mant\u0131k \u0130\u00e7in Uygun De\u011fil:<\/strong> \u015eablon dizileri, dize i\u00e7ine basit ifadeleri yerle\u015ftirmek i\u00e7in harikad\u0131r. Ancak, i\u00e7inde <code>if\/else<\/code> bloklar\u0131 veya <code>for<\/code> d\u00f6ng\u00fcleri gibi karma\u015f\u0131k mant\u0131k i\u00e7eren ifadeler yazmak, kodu okunaks\u0131z hale getirebilir. Bu t\u00fcr durumlarda, mant\u0131\u011f\u0131 dize d\u0131\u015f\u0131nda ayr\u0131 fonksiyonlarda i\u015fleyip sonucunu dizeye yerle\u015ftirmek daha iyi bir yakla\u015f\u0131md\u0131r.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>JavaScript&#8217;in \u015fablon dizileri, modern web geli\u015ftiricilerinin ara\u00e7 kutusundaki en de\u011ferli eklentilerden biridir. Geleneksel dize birle\u015ftirme y\u00f6ntemlerinin getirdi\u011fi zorluklar\u0131 a\u015farak, daha temiz, daha okunabilir ve daha verimli kod yazmam\u0131z\u0131 sa\u011flarlar. \u00c7ok sat\u0131rl\u0131 dizelerden ifade yerle\u015ftirmeye, etiketli \u015fablonlar\u0131n sundu\u011fu geli\u015fmi\u015f dize i\u015fleme yeteneklerine kadar geni\u015f bir kullan\u0131m yelpazesi sunarlar.<\/p>\n<p>\u015eablon dizilerini anlamak ve etkin bir \u015fekilde kullanmak, sadece daha iyi JavaScript kodu yazman\u0131za yard\u0131mc\u0131 olmakla kalmaz, ayn\u0131 zamanda modern JavaScript ekosistemindeki bir\u00e7ok k\u00fct\u00fcphane ve \u00e7er\u00e7eveyi daha iyi anlaman\u0131za da olanak tan\u0131r. \u0130ster basit bir mesaj olu\u015fturuyor, ister karma\u015f\u0131k bir kullan\u0131c\u0131 aray\u00fcz\u00fc tasarl\u0131yor olun, \u015fablon dizileri kodunuzu daha esnek, daha g\u00fcvenli ve daha keyifli hale getirecektir. Bu g\u00fc\u00e7l\u00fc \u00f6zelli\u011fi benimseyerek, JavaScript geli\u015ftirme deneyiminizi bir \u00fcst seviyeye ta\u015f\u0131yabilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"JavaScript&#8217;te \u015eablon Dizilerini Anlamak\nGiri\u015f: Modern Dize Y\u00f6netimine Bir Bak\u0131\u015f\nJavaScript, web geli\u015ftirmenin temel ta\u015flar\u0131ndan biri olarak","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-35540","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>JavaScript&#039;te \u015eablon Dizilerini Anlamak - 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\/javascriptte-sablon-dizilerini-anlamak\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JavaScript&#039;te \u015eablon Dizilerini Anlamak\" \/>\n<meta property=\"og:description\" content=\"JavaScript&#039;te \u015eablon Dizilerini Anlamak Giri\u015f: Modern Dize Y\u00f6netimine Bir Bak\u0131\u015f JavaScript, web geli\u015ftirmenin temel ta\u015flar\u0131ndan biri olarak\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-30T20:40:39+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=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"JavaScript&#8217;te \u015eablon Dizilerini Anlamak\",\"datePublished\":\"2025-11-30T20:40:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/\"},\"wordCount\":2267,\"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\/javascriptte-sablon-dizilerini-anlamak\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/\",\"name\":\"JavaScript'te \u015eablon Dizilerini Anlamak - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-30T20:40:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript&#8217;te \u015eablon Dizilerini Anlamak\"}]},{\"@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":"JavaScript'te \u015eablon Dizilerini Anlamak - 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\/javascriptte-sablon-dizilerini-anlamak\/","og_locale":"tr_TR","og_type":"article","og_title":"JavaScript'te \u015eablon Dizilerini Anlamak","og_description":"JavaScript'te \u015eablon Dizilerini Anlamak Giri\u015f: Modern Dize Y\u00f6netimine Bir Bak\u0131\u015f JavaScript, web geli\u015ftirmenin temel ta\u015flar\u0131ndan biri olarak","og_url":"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-30T20:40:39+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"JavaScript&#8217;te \u015eablon Dizilerini Anlamak","datePublished":"2025-11-30T20:40:39+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/"},"wordCount":2267,"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\/javascriptte-sablon-dizilerini-anlamak\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/","url":"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/","name":"JavaScript'te \u015eablon Dizilerini Anlamak - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-30T20:40:39+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-sablon-dizilerini-anlamak\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"JavaScript&#8217;te \u015eablon Dizilerini Anlamak"}]},{"@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\/35540","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=35540"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35540\/revisions"}],"predecessor-version":[{"id":35541,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35540\/revisions\/35541"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35540"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35540"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35540"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}