颈部减肥锻炼办法 四个方法教你拥有迷人颈部
![]() JavaScript Logosu ![]() JavaScript kaynak kodu ekran g?rüntüsü | |
Paradigmas? | ?oklu paradigma: Olaya dayal? programlama, Fonksiyonel programlama, Zorunlu programlama, Nesne y?nelimli programlama |
---|---|
?lk ??k??? | 4 Aral?k 1995[1] | )
Tasar?mc? | Ba?lang??ta Netscape'ten Brendan Eich; di?erleri de ECMAScript standard?na katk?da bulunmu?tur. |
Kararl? sürüm | ECMAScript 2024[2] ![]() |
?nizleme sürümü | ECMAScript 2025[3] ![]() |
?nemli uygulamalar? | V8, JavaScriptCore, SpiderMonkey, Chakra |
Etkilendikleri | Java,[4][5] Scheme,[5] Self,[6] AWK,[7] HyperTalk[8] |
Etkiledikleri | ActionScript, AssemblyScript, CoffeeScript, Dart, Haxe, JS++, Objective-J, Opa, TypeScript |
Ola?an dosya uzant?lar? |
|
Web sitesi | ecma-international.org/publications-and-standards/standards/ecma-262/ |
HTML |
---|
Kar??la?t?rmalar |
JavaScript[10] (genellikle JS olarak k?salt?l?r), HTML ve CSS ile birlikte World Wide Web'in temel teknolojilerinden biri olan programlama dilidir.[11] Web sitelerinin %97'sinden fazlas?, web sayfas? hareketleri i?in istemci taraf?nda JavaScript kullan?rlar [12] ve kullan?lan kodlar genellikle ü?üncü taraf kitapl?klar? i?erir.[13] Tüm büyük web taray?c?lar?nda, kaynak kodunu kullan?c?lar?n cihazlar?nda yürütebilmek i?in ?zel bir JavaScript motoru bulunur.
JavaScript, ECMAScript standard?na uyan, genellikle e? zamanl? olarak derlenmi?, üst düzey bir dildir.[14] Dinamik yazma, prototip tabanl? obje y?nelimi ve birinci s?n?f i?levlere sahiptir. Olay odakl?, i?levsel ve zorunlu programlama stillerini destekleyen ?oklu paradigmad?r. Metin, tarihler, düzenli ifadeler, standart veri yap?lar? ve Belge Obje Modeli (DOM) ile ?al??mak i?in uygulama programlama arayüzlerine (API'ler) sahiptir.
ECMAScript standard?, a? olu?turma, depolama veya grafik olanaklar? gibi herhangi bir giri?/??k?? (I/O) i?ermez. Pratikte, web taray?c?s? veya di?er ?al??t?rma ortamlar?, I/O i?in JavaScript API'leri sa?larlar.
JavaScript motorlar? ba?lang??ta yaln?zca web taray?c?lar?nda kullan?l?yordu, ancak günümüzde baz? sunucular?n ve ?e?itli uygulamalar?n da temel bile?enleridir. Bu kullan?m i?in en yayg?n ?al??ma zaman? sistemi Node.js'dir.
Java ve JavaScript'in ad, s?zdizimi ve ilgili standart kitapl?klar a??s?ndan benzerlikleri olsa da, iki dil birbirinden farkl?d?r ve tasar?m a??s?ndan da büyük farkl?l?klar g?sterir.
Tarih?e
[de?i?tir | kayna?? de?i?tir]Netscape'te Olu?turma
[de?i?tir | kayna?? de?i?tir]Grafik kullan?c? arayüzüne sahip ilk web taray?c?s? Mosaic, 1993 y?l?nda piyasaya sürüldü. Teknik bilgisi olmayan ki?ilerin eri?ebildi?i, yeni ortaya ??kan World Wide Web'in h?zl? büyümesinde ?nemli bir rol oynam??t?r.[15] Mosaic'in ?nde gelen geli?tiricileri daha sonra 1994'te daha parlak bir gelece?i oldu?u dü?ünülen Netscape Navigator taray?c?s?n? piyasaya süren Netscape ?irketini kurdular. Netscape Navigator h?zla en ?ok kullan?lan taray?c? haline geldi.[16][17]
Web'in yeni ?ekillenmeye ba?lad??? bu y?llarda, web sayfalar? yaln?zca statik olabilirdi ve sayfa taray?c?ya yüklendikten sonra dinamik davran?? yetene?inden de yoksundu. Geli?en web geli?tirme sahnesinde, programlamac?lar?n bu s?n?rlaman?n kald?r?lmas?na y?nelik istekleri vard?, bu nedenle 1995'te Netscape, Navigator'a bir komut dosyas? dili eklemeye karar verdi. Bunu ba?armak i?in iki yol izlediler: Java programlama dilini yerle?tirmek i?in Sun Microsystems ile i? birli?i yaparken, ayn? zamanda Scheme dilini yerle?tirmek i?in de Brendan Eich'i i?e ald?lar.[5]
Netscape y?netimi k?sa süre sonra Eich i?in en iyi se?ene?in Java'ya benzer ve daha az Scheme veya di?er mevcut komut dosyas? dillerine benzeyen yeni bir dil tasarlamak oldu?una karar verdi.[5] Eylül 1995'te Navigator beta'n?n bir par?as? olarak ilk sunuldu?unda, eklenen yeni dil ve yorumlay?c? uygulamas? LiveScript olarak adland?r?lsa da, Aral?k ay?nda resmi sürüm i?in ad? JavaScript olarak de?i?tirildi.[5][18]
JavaScript ad?n?n se?imi, do?rudan Java ile ilgili oldu?u ima edilerek kafa kar???kl???na neden oldu. O zamanlar dot-com balonu patlam??t? ve Java henüz yeni bir programlama dili idi, bu nedenle Eich, JavaScript ad?n? Netscape'in bir pazarlama takti?i olarak g?rdü.[19]
Microsoft taraf?ndan benimsenmesi
[de?i?tir | kayna?? de?i?tir]Microsoft, 1995 y?l?nda Internet Explorer'? piyasaya sürerek Netscape ile bir taray?c? sava??na yol a?t?. JavaScript cephesinde, Microsoft, JScript adl? kendi yorumlay?c?s?n? olu?turmak i?in Navigator yorumlay?c?s?nda tersine mühendislik yapt?.[20]
JScript ilk olarak 1996'da, CSS i?in ilk ve HTML uzant?lar? ile birlikte piyasaya sürüldü. Bu uygulamalar?n her biri, Navigator'daki benzerlerinden belirgin ?ekilde farkl?yd?.[21][22] Bu farkl?l?klar, geli?tiricilerin web sitelerinin her iki taray?c?da da sa?l?kl? ?ekilde ?al??mas?n? zorla?t?rd? ve birka? y?l boyunca "En iyi Netscape'te g?rüntülenir" ve "En iyi Internet Explorer'da g?rüntülenir" ?eklinde logolar?n yayg?n olarak kullan?lmas?na yol a?t?.[21][23]
JScript'in yükseli?i
[de?i?tir | kayna?? de?i?tir]Kas?m 1996'da Netscape, JavaScript'i Ecma International'a tüm taray?c? sat?c?lar?n?n uyabilece?i standart bir belirtimin ba?lang?? noktas? olarak sundu. Bu, Haziran 1997'de ilk ECMAScript dil spesifikasyonunun resm? olarak yay?nlanmas?na yol a?t?.
Standartlar süreci, ECMAScript 2'nin Haziran 1998'de ve ECMAScript 3'ün Aral?k 1999'da piyasaya sürülmesiyle birka? y?l boyunca devam etti. ECMAScript 4 üzerindeki ?al??malar ise 2000 y?l?nda ba?lad?.[20]
Bu arada Microsoft, taray?c? pazar?nda giderek daha bask?n bir konuma geldi. 2000'lerin ba??nda, Internet Explorer'?n pazar pay? %95'e ula?t?.[24] Bu durum, JScript'in Web'de istemci taraf? komut dosyas? olu?turmak i?in ger?ek bir standart haline geldi?i anlam?n? ta??yordu.
Microsoft ba?lang??ta standartlar sürecine kat?ld? ve baz? ?nerileri kendi JScript dilinde uygulad?, ancak sonunda Ecma ?al??mas? üzerinde i? birli?ini durdurdu. B?ylece ECMAScript 4 yenilmi? oldu.
Büyüme ve standardizasyon
[de?i?tir | kayna?? de?i?tir]2000'lerin ba??nda Internet Explorer'?n hakimiyeti d?neminde, istemci taraf? komut dosyas? olu?turma y?ntemi olduk?a durgundu. Bu, Netscape'in halefi Mozilla'n?n Firefox taray?c?s?n? piyasaya sürdü?ü 2004 y?l?nda de?i?meye ba?lad?. Firefox bir?ok ki?i taraf?ndan iyi bir ?ekilde kar??land? ve Internet Explorer'dan ?nemli bir pazar pay?n? kendisine ald?.[25]
2005 y?l?nda Mozilla, ECMA International'a kat?ld? ve ECMAScript for XML (E4X) standard? üzerinde ?al??maya ba?lad?. Bu, Mozilla'n?n bir ECMAScript 4 tasla??na dayanan ActionScript 3 dilinde E4X'i uygulayan Macromedia (daha sonra Adobe Systems taraf?ndan sat?n al?nd?) ile ortak olarak ?al??mas?na yol a?t?. Hedef, ActionScript 3'ü yeni ECMAScript 4 olarak standart hale getirmekti. Bu ama?la Adobe Systems, Tamarin uygulamas?n? a??k kaynakl? bir proje olarak yay?nlad?. Ancak, Tamarin ve ActionScript 3, yerle?ik istemci taraf? komut dosyas? olu?turmaktan ?ok farkl?yd? ve Microsoft'un i? birli?i olmadan, ECMAScript 4 hi?bir zaman istenen sonu?lar? vermedi.
Bu arada, ECMA ?al??mas?na ba?l? olmayan a??k kaynak topluluklar?nda ?ok ?nemli geli?meler ya?an?yordu. 2005'te Jesse James Garrett, Ajax terimini türetti?i ve verilerin arka planda yüklenebilece?i web uygulamalar? olu?turmak i?in JavaScript'in omurgas? oldu?u bir dizi teknolojiyi tan?mlad??? ve tam sayfa gereksinimini ortadan kald?rd??? bir WhiteBook yay?nlad?. Bu, a??k kaynak kitapl?klar?n ve onlar?n etraf?nda olu?an topluluklar?n ?ncülük etti?i bir JavaScript r?nesans d?nemini ate?ledi. jQuery, Prototype, Dojo Toolkit ve MooTools dahil olmak üzere bir?ok yeni kitapl?k olu?turuldu.
Google, Chrome taray?c?s?n? 2008'de rakiplerinden daha h?zl? olan V8 JavaScript motoruyla piyasaya sürdü.[26][27] En ?nemli yenilik tam zaman?nda derlemeydi (JIT),[28] bu nedenle di?er taray?c? sat?c?lar?n?n motorlar?n? JIT i?in elden ge?irmeleri gerekiyordu.[29]
Temmuz 2008'de, bu farkl? taraflar Oslo'da bir konferans i?in bir araya geldi. Bu birle?me, konuyla ilgili tüm ?al??malar? birle?tirmek ve dili ileriye ta??mak i?in 2009 ba?lar?nda nihai anla?maya yol a?t?. Sonucu ise Aral?k 2009'da yay?nlanan ECMAScript 5 standard?yd?.
Olgunlu?a ula?mas?
[de?i?tir | kayna?? de?i?tir]Dil üzerinde iddial? ?al??malar birka? y?l boyunca devam etti ve 2015 y?l?nda ECMAScript 6'n?n yay?nlanmas?yla resm?le?tirilen kapsaml? bir ekleme ve iyile?tirme derlemesiyle sonu?land?.[30]
Node.js'nin 2009 y?l?nda Ryan Dahl taraf?ndan olu?turulmas?, JavaScript'in web taray?c?lar? d???nda kullan?m?nda ?nemli bir art??a yol a?t?. Node, V8 motorunu, bir olay d?ngüsünü ve I/O API'lerini birle?tirerek ba??ms?z bir JavaScript ?al??ma zaman? sistemi sa?lamaktayd?. 2018 itibar?yla, Node milyonlarca geli?tirici taraf?ndan kullan?l?yordu [31] ve npm dünyadaki herhangi bir paket y?neticisinden ?ok daha fazla modüle sahipti.[32]
ECMAScript taslak belirtimi ?u anda GitHub'da herkese a??k bir ?ekilde korunmaktad?r ve sürümler düzenli ?ekilde y?ll?k anl?k g?rüntüler arac?l???yla üretilmektedir.[33] Dildeki olas? revizyonlar, kapsaml? bir teklif süreciyle incelenir.[34][35] Art?k, sürüm numaralar? yerine geli?tiriciler, gelecek ?zelliklerin durumunu tek tek kontrol etmektedirler.[33]
Mevcut JavaScript ekosisteminde bulunan bir?ok kitapl?k ve ?er?evenin, baz?lar? yerle?ik programlama uygulamalar? ve web taray?c?lar?n?n d???nda JavaScript'in farkl? kullan?m alanlar? i?in olu?turulmu?tur. Ayr?ca, tek sayfal?k uygulamalar?n ve di?er JavaScript a??rl?kl? web sitelerinin artmas?yla birlikte, geli?tirme sürecine yard?mc? olmak i?in birka? aktar?c? da olu?turulmu?tur.[36]
Ticari Marka
[de?i?tir | kayna?? de?i?tir]"JavaScript" ad?, Oracle Corporation'?n Amerika Birle?ik Devletleri'ndeki ticari markas?d?r.[37][38]
Web sitesi istemci taraf? kullan?m?
[de?i?tir | kayna?? de?i?tir]JavaScript, web sitelerinin % 97'sinin bu ama?la kulland???, Web'in bask?n istemci taraf? komut dosyas? dilidir.[12] Komut dosyalar? HTML belgelerine g?mülür veya bunlar da dahil edilmi? olur. B?ylelikle kodlar DOM ile etkile?ime girer. Tüm büyük web taray?c?lar?nda, kodu kullan?c?n?n cihaz?nda yürüten yerle?ik bir JavaScript motoru bulunur.
Komut dosyas?yla yaz?lm?? davran?? ?rnekleri
[de?i?tir | kayna?? de?i?tir]- Ajax veya WebSocket arac?l???yla sayfay? yeniden yüklemeden yeni web sayfas? i?eri?i yükleme. ?rne?in, sosyal medya kullan?c?lar? mevcut sayfadan ayr?lmadan mesaj g?nderip alabilir.
- Nesneleri soldurma, yeniden boyutland?rma ve ta??ma gibi web sayfas? animasyonlar?.
- Taray?c? oyunlar? oynama.
- Ak?? ortam?n?n oynat?lmas?n? kontrol etme.
- A??lan (pop-up) reklamlar olu?turma.
- Veriler bir web sunucusuna g?nderilmeden ?nce bir web formunun giri? de?erlerinin do?rulanmas?.
- Kullan?c?n?n davran???yla ilgili verilerin günlü?e kaydedilmesi ve ard?ndan bir sunucuya g?nderilmesi. Web sitesi sahibi bu verileri analiz, reklam takibi ve ki?iselle?tirme i?in kullanabilir.
- Bir kullan?c?y? ba?ka bir sayfaya y?nlendirme.
Kitapl?klar ve ?er?eveler
[de?i?tir | kayna?? de?i?tir]Web sitelerinin %80'inden fazlas?, istemci taraf? komut dosyas? olu?turma i?in bir ü?üncü taraf JavaScript kitapl??? veya web ?er?evesi kullan?rlar.[13]
jQuery, web sitelerinin %75'inden fazlas? taraf?ndan kullan?lan a??k ara en popüler kitapl?kt?r.[13] Facebook, web sitesi i?in React kitapl???n? olu?turdu ve daha sonra bunu a??k kaynak olarak yay?nlad?; Twitter dahil di?er pek ?ok site günümüzde bunu kullanmaktad?r. Ayn? ?ekilde Google'?n YouTube ve Gmail'i de dahil olmak üzere web siteleri i?in olu?turdu?u Angular ?er?evesi art?k ba?kalar? taraf?ndan kullan?labilen a??k kaynakl? bir projedir.[13]
Buna kar??l?k, "Vanilla JS" terimi, herhangi bir kitapl?k veya ?er?eve kullanmayan, bunun yerine tamamen standart JavaScript i?levselli?ine dayanan web siteleri i?in olu?turulmu?tur.[39]
Di?er kullan?mlar?
[de?i?tir | kayna?? de?i?tir]JavaScript kullan?m?, web taray?c?s? k?klerinin ?tesine ge?mi?tir. JavaScript motorlar? art?k hem sunucu taraf? web sitesi da??t?mlar? hem de taray?c? d??? uygulamalar i?in ?e?itli di?er yaz?l?m sistemlerine yerle?tirilmi?tir.
Sunucu taraf? JavaScript kullan?m?n? te?vik etmeye y?nelik ilk giri?imler, Netscape Enterprise Server ve Microsoft'un Internet Information Services [40][41] idi, ancak bunlar kü?ük ?zelliklerdi.[42] Sunucu taraf? kullan?m?, 2000'lerin sonlar?nda Node.js ve di?er yakla??mlar?n olu?turulmas?yla birlikte büyümeye ba?lad?.[42]
Electron, Cordova, React Native ve di?er uygulama ?er?eveleri, JavaScript'te uygulanan davran??la bir?ok uygulama olu?turmak i?in kullan?lm??t?r. Taray?c? olmayan di?er uygulamalar, PDF belgelerini komut dosyas? yazmak i?in Adobe Acrobat deste?i [43] ve JavaScript ile yaz?lm?? GNOME Shell uzant?lar?n? i?erir.[44]
JavaScript, son zamanlarda baz? g?mülü sistemlerde, genellikle Node.js'den yararlan?larak g?rünmeye ba?lad?.[45][46][47]
?zellikler
[de?i?tir | kayna?? de?i?tir]A?a??daki ?zellikler, aksi a??k?a belirtilmedi?i sürece, uyumlu tüm ECMAScript uygulamalar? i?in ortakt?r.
Zorunlu ve yap?land?r?lm??
[de?i?tir | kayna?? de?i?tir]JavaScript, C'nin yap?land?r?lm?? programlama s?zdiziminin ?o?unu destekler (?rne?in, if
ifadeleri, while
d?ngüleri, switch
ifadeleri, do while
d?ngüleri vb.). K?smi bir istisna kapsam belirlemedir: ba?lang??ta JavaScript yaln?zca var
ile i?lev kapsam?na sahipti; daha sonra ECMAScript 2015'te let
ve const
anahtar s?zcükleriyle blok kapsam? eklendi. C gibi, JavaScript de expressionslar ve statementslar aras?nda bir ayr?m yapar. C'den bir s?zdizimsel fark? da, noktal? virgüllerin (deyimleri sonland?ran) atlanmas?na izin veren otomatik noktal? virgül eklemedir.[48]
Zay?f yaz?lm??
[de?i?tir | kayna?? de?i?tir]JavaScript zay?f yaz?lm??t?r, bu kullan?lan i?leme ba?l? olarak belirli türlerin dolayl? olarak yay?nland??? anlam?na gelir.[49]
- ?kili
+
operat?rü, her iki i?lenen de say? olmad??? sürece her iki i?leneni de bir dizeye atar. Bunun nedeni, toplama operat?rünün bir birle?tirme operat?rü olarak da kullan?lmas?ndan dolay?d?r. - ?kili
-
i?leci her zaman her iki i?leneni de bir say?ya atar - Her iki birli operat?r (
+
,-
) i?leneni her zaman bir say?ya ?evirir.
De?erler a?a??daki gibi dizgelere d?nü?türülür:[49]
- Dizeler oldu?u gibi b?rak?l?r
- Say?lar dize temsillerine d?nü?türülür
- Dizilerin ??eleri dizelere d?nü?türülür ve ard?ndan virgül (
,
) ile birle?tirilirler. - Di?er objeler
[object Object]
dizesine d?nü?türülür; buradaObject
, objenin yap?c?s?n?n ad?d?r
De?erler, dizelere d?nü?türülerek ve ard?ndan dizeler de say?lara d?nü?türülerek, say?lara d?nü?türülür. Bu süre?ler, s?ras?yla dize ve say? d?kümü i?in prototip üzerinde toString
ve valueOf
i?levleri tan?mlanarak de?i?tirilebilir.
JavaScript, kurallar?n karma??kl??? tutars?zl?kla kar??t?r?labilece?inden, bu d?nü?ümleri uygulama ?ekli nedeniyle ele?tiriler alm??t?r.[49][50] ?rne?in, bir dizeye say? eklerken, say? birle?tirme yap?lmadan ?nce bir dizeye d?nü?türülür, ancak bir dizeden bir say? ??kar?l?rken, ??karma i?lemi yap?lmadan ?nce dize bir say?ya d?nü?türülür.
Sol ??leyici | Operat?r | Sa? ??leyici | Sonu? |
---|---|---|---|
[] (bo? dizi/array)
|
+
|
[] (bo? dizi/array)
|
"" (bo? string/dize)
|
[] (bo? dizi/array)
|
+
|
{} (bo? obje/nesne)
|
"[object Object]" (dize/string)
|
false (boole/do?ru-yanl??)
|
+
|
[] (bo? dizi/array)
|
"false" (dize/string)
|
"123" (dize/string)
|
+
|
1 (say?/number)
|
"1231" (dize/string)
|
"123" (dize/string)
|
-
|
1 (say?/number)
|
122 (say?/number)
|
"123" (dize/string)
|
-
|
"abc" (dize/string)
|
NaN (say?/number)
|
Genellikle, {} + []
ile sonu?lanan 0
(say?) da belirtilir. Bu yan?lt?c?d?r: {}
bo? bir obje yerine bo? bir kod blo?u olarak yorumlan?r ve bo? dizi kalan unary (tekli) +
operat?rü taraf?ndan bir say?ya d?nü?türülür. ?fadeyi parantez i?ine al?rsan?z ({} + [])
küme parantezleri bo? bir obje olarak yorumlan?r ve ifadenin sonucu beklendi?i gibi "[object Object]"
olur.[49]
Dinamik
[de?i?tir | kayna?? de?i?tir]- Yaz?m
- JavaScript, di?er ?o?u betik dili gibi dinamik olarak yaz?l?r . Bir tür, bir ifade yerine bir de?erle ili?kilendirilir. ?rne?in, ba?lang??ta bir say?ya ba?l? olan bir de?i?ken, bir dizgeye yeniden atanabilir.[51] JavaScript, ?rdek yaz?m? dahil, objelerin türünü test etmenin ?e?itli yollar?n? destekler. [52]
- ?al??ma zaman? de?erlendirmesi
- JavaScript, ?al??ma zaman?nda dizeler olarak sa?lanan ifadeler
eval
bir de?erlendirme i?levi i?erir.
Nesne (Obje) y?nelimi (prototip tabanl?)
[de?i?tir | kayna?? de?i?tir]JavaScript'teki prototip kal?t?m, Douglas Crockford taraf?ndan ?u ?ekilde tan?mlan?r:
EKS?K ALAN
JavaScript'te bir obje, bir prototiple büyütülmü? bir ili?kisel dizidir (a?a??ya bak?n); her anahtar bir objenin ?zelli?i i?in ad sa?lar ve b?yle bir ad? belirtmenin iki s?zdizimsel yolu vard?r: nokta notasyonu (obj.x = 10
) ve parantez g?sterimi (obj['x'] = 10
). Bir ?zellik, ?al??ma zaman?nda eklenebilir, geri tepebilir veya silinebilir. Bir objenin ?o?u ?zelli?i (ve bir objenin prototip miras zincirine ait olan herhangi bir ?zellik), bir for...in
d?ngüsü kullan?larak numaraland?r?labilir.
- Prototipler
- JavaScript, di?er bir?ok nesne y?nelimli dilin kal?t?m i?in s?n?flar? kulland??? prototipleri kullan?r.[53] JavaScript'te prototiplerle bir?ok s?n?f tabanl? ?zelli?i simüle etmek mümkündür.[54]
- Obje olu?turucu olarak fonksiyonlar
- Fonksiyonlar, tipik rolleriyle birlikte obje olu?turucular olarak ikiye ayr?l?r. Bir fonksiyon ?a?r?s?na new ile ?nek eklemek, yap?c?dan ?zellikleri ve y?ntemleri (
Object
prototipinden ?zellikler dahil) devralan bir prototip ?rne?i olu?turur.[55] ECMAScript 5,Object
prototipinden otomatik olarak miras al?nmadan bir ?rne?in a??k bir ?ekilde olu?turulmas?na izin verenObject.create
y?ntemini sunar (eski ortamlar prototipinull
??esine atayabilir).[56]prototype
?zelli?i, yeni objenin dahili prototipi i?in kullan?lan objeyi belirler. Yap?c? olarak kullan?lan fonksiyonun prototipi de?i?tirilerek yeni y?ntemler eklenebilir. JavaScript'inArray
veyaObject
gibi yerle?ik olu?turucular? da de?i?tirilebilen prototiplere sahiptir.Object
prototipini de?i?tirmek mümkün olsa da, JavaScript'teki ?o?u obje,Object
prototipinden y?ntemleri ve ?zellikleri devralaca??ndan ve prototipin de?i?tirilmesini beklemeyebilece?inden, genellikle k?tü uygulama olarak kabul edilirler.[57] - Metod olarak fonksiyonlar
- Bir?ok nesne y?nelimli dilden farkl? olarak, i?lev tan?m? ile metot tan?m? aras?nda bir ayr?m yoktur. Bunun yerine, fonksiyon ?a?r?s? s?ras?nda ayr?m olu?ur; Bir fonksiyon, bir objenin metodu olarak ?a?r?ld???nda, fonksiyonun yerel this anahtar s?zcü?ü, o ?a?r? i?in o objeye ba?lan?r.
Fonksiyonel
[de?i?tir | kayna?? de?i?tir]Bir fonksiyon birinci s?n?ft?r ; bir fonksiyon bir obje olarak kabul edilir.[58] Bu nedenle, bir fonksiyonun .call()
ve .bind()
gibi ?zellikleri ve metotlar? olabilir.[59] ?? i?e fonksiyon, ba?ka bir fonksiyon i?inde tan?mlanan bir fonksiyondur. D?? fonksiyon her ?a?r?ld???nda olu?turulur. Ek olarak, i? i?e ge?mi? her i?lev s?zcüksel bir kapan?? olu?turur: d?? i?levin s?zcüksel kapsam? (herhangi bir sabit, yerel de?i?ken veya ba??ms?z de?i?ken de?eri dahil), d?? i?levin yürütülmesi sona erdikten sonra bile, her bir i? fonksiyon objesinin i? durumunun bir par?as? haline gelir. . [52] JavaScript ayr?ca anonim i?levleri de destekler.
Yetkilendirme
[de?i?tir | kayna?? de?i?tir]JavaScript, ?rtük ve a??k yetkilendirmeyi destekler.
- Rol olarak fonksiyonlar [?zellikler (Traits) ve Kar???mlar (Mixins)]
- JavaScript, Traits [60] ve Mixins gibi Rol modellerinin ?e?itli fonksiyon tabanl? uygulamalar?n? da yerel olarak destekler. B?yle bir fonksiyon,
function
g?vdesi i?indethis
anahtar s?zcü?üne ba?l? en az bir y?ntemle ek davran??? tan?mlar. Daha sonra bir Rol,call
yoluyla a??k?a devredilmeli veya prototip zinciri arac?l???yla payla??lmayan ek davran??lara sahip olmas? gereken objelereapply
(uygulama) edilmelidir. - Obje kompozisyonu ve kal?t?m
- A??k fonksiyon tabanl? yetkilendirme JavaScript'te kompozisyonu kapsarken, ?rtük yetkilendirme, ?rne?in, bir objeyle ilgili olabilecek ancak do?rudan bir objeye ait olmayan bir metot bulmak i?in prototip zinciri her yürüdü?ünde zaten ger?ekle?ir. Metot bulundu?unda, bu objenin ba?lam?nda ?a?r?l?r. Bu nedenle JavaScript'teki kal?t?m, yap?c? fonksiyonlar?n prototip ?zelli?ine ba?l? bir yetkilendirme otomatizmi taraf?ndan kapsan?r.
?e?itli
[de?i?tir | kayna?? de?i?tir]JS s?f?r indeksli bir dildir.
- ?al??ma zaman? ortam?
- JavaScript, komut dosyalar?n?n ortamla etkile?ime girebilece?i objeler ve metotlar (?rne?in, bir web sayfas? DOM u) sa?lamak i?in tipik olarak bir ?al??ma zaman? ortam?na (?rne?in bir web taray?c?s? ) dayan?r. Bu ortamlar tek i? par?ac?kl?d?r . JavaScript ayr?ca, komut dosyalar?n? (?rne?in, HTML
<script>
??eleri) dahil etme/i?e aktarma yetene?i sa?lamak i?in ?al??ma zaman? ortam?na da güvenir. Bu, ba?l? ba??na bir dil ?zelli?i de?ildir, ancak ?o?u JavaScript uygulamas?nda yayg?nd?r. JavaScript, bir kuyruktan gelen mesajlar? birer birer i?ler. JavaScript, her yeni mesajla ili?kili bir fonksiyonu ?a??r?r ve fonksiyonun ba??ms?z de?i?kenleri ve yerel de?i?kenlerle bir ?a?r? y???n? (call stack) ?er?evesi olu?turur. ?a?r? y???n?, fonksiyonun ihtiya?lar?na g?re kü?ülür veya büyür. Fonksiyon tamamland?ktan sonra ?a?r? y???n? bo? oldu?unda, JavaScript s?radaki bir sonraki mesaja ilerler. Buna olay d?ngüsü (event loop) denir ve "tamamlanmak i?in ?al??t?r" olarak tan?mlan?r, ?ünkü her mesaj bir sonraki mesaj dikkate al?nmadan ?nce tamamen i?lenir. Ancak, dilin e?zamanl?l?k modeli, olay d?ngüsünü engellemeyen olarak tan?mlar: program giri?i/??k???, olaylar ve geri arama i?levleri (callback fonksiyon) kullan?larak ger?ekle?tirilir. Bu, JavaScript'in bir veritaban? sorgusunun bilgi d?ndürmesini beklerken bir fare t?klamas?n? i?leyebilece?i anlam?na gelir.[61]
- De?i?ken (Varyadik) fonksiyonlar
- Bir fonksiyona s?n?rs?z say?da parametre iletilebilir. Fonksiyon bunlara bi?imsel parametreler arac?l???yla ve ayr?ca yerel
arguments
objesi arac?l???yla eri?ebilir.bind
y?ntemi kullan?larak de?i?ken fonksiyonlar da olu?turulabilir.
- Dizi ve obje de?i?mezleri (literal)
- Bir?ok komut dosyas? dili gibi, diziler ve objeler (di?er dillerdeki ili?kisel diziler ) k?sa bir k?sayol s?zdizimi ile olu?turulabilir. Asl?nda, bu de?i?mez de?erler JSON veri format?n?n temelini olu?turur.
- Düzenli ifadeler (Regular expressions)
- JavaScript ayr?ca, yerle?ik dize i?levlerinden daha karma??k olan metin i?leme i?in ?zlü ve gü?lü bir s?zdizimi sa?layan Perl'e benzer ?ekilde düzenli ifadeleri de destekler.[62]
- S?zler (Promise) ve zaman uyumsuz/bekleme (Async/await)
- JavaScript, zaman uyumsuz i?lemleri i?lemek i?in promise lar? ve Async/await destekler. Yerle?ik bir Promise objesi, vaatleri i?lemek ve i?leyicileri e?zamans?z bir eylemin nihai sonucuyla ili?kilendirmek i?in i?levsellik sa?lar. Son zamanlarda, geli?tiricilerin birden ?ok JavaScript promise ?n? birle?tirmesine ve farkl? senaryolara dayal? i?lemler yapmas?na olanak tan?yan JavaScript belirtiminde birle?tirici y?ntemler tan?t?ld?. Tan?t?lan y?ntemler ?unlard?r: Promise.race, Promise.all, Promise.allSettled ve Promise.any. Zaman uyumsuz/bekleme, e?zamans?z, engellemesiz bir i?levin s?radan bir e?zamanl? i?leve benzer bir ?ekilde yap?land?r?lmas?na izin verir. Asenkron, bloke edici olmayan kod, minimum ek yük ile geleneksel senkronize, bloke edici koda benzer ?ekilde yap?land?r?labilir.
Standart olmayan ?zellikler
[de?i?tir | kayna?? de?i?tir]Tarihsel olarak, baz? JavaScript motorlar? bu standart olmayan ?zellikleri destekledi:
- ko?ullu
catch
cümleleri (Java gibi) - Dizi kavray??lar? (array comprehensions) ve ürete? ifadeleri (Python gibi)
- k?sa fonksiyon ifadeleri (
function(args) expr
; bu deneysel s?zdizimi ok i?levlerinden ?nce gelir) - ECMAScript for XML (E4X), ECMAScript'e yerel XML deste?i ekleyen bir uzant? (sürüm 21 [63] den beri Firefox'ta desteklenmemektedir)
S?zdizimi
[de?i?tir | kayna?? de?i?tir]Basit ?rnekler
[de?i?tir | kayna?? de?i?tir]JavaScript'teki de?i?kenler, var
,[64] let
[65] veya const
[66] anahtar s?zcükleri kullan?larak tan?mlanabilir.
// 'x' ad?nda bir fonksiyon kapsaml? (function-scoped) de?i?ken bildirir ve buna üstü kapal? ?ekilde
// 'undefined' ?zel de?erini atar. De?eri olmayan de?i?kenler otomatik 'undefined' (tan?ms?z) olarak ayarlan?r.
var x;
// De?i?kenler, bunun gibi elle 'tan?ms?z' olarak ayarlanabilir
var x2 = undefined;
// ?rnek `y` ad?nda bir de?i?keni blok kapsam?nda (block-scoped) bildirir ve
// de?i?kenin bir de?eri olmad??? i?in onu `undefined` (tan?ms?z) olarak ayarlar.
// "let" anahtar s?zcü?ü ECMAScript 2015'te tan?t?lm??t?r.
let y;
// Blok kapsam?nda (block-scoped) bir bildirim yapar, `z` art?k yeniden de?er atanamaz olur ve
// onu bir string de?i?mezine ayarlar. `const` anahtar s?zcü?ü ECMAScript 2015'te tan?t?lm??t?r ve
// yaln?zca net bir ?ekilde atan?r.
// `const` anahtar s?zcü?ü 'sabit' anlam?na gelir ki bu nedenden dolay? 'de?eri' (value) sabit oldu?undan
// de?i?ken baz? ufak istisnalar d???nda yeni de?er alamaz/atanamaz.
const z = "bu anahtar s?zcü?ünün de?eri yani buraya yeniden atama yap?lamaz!";
// `benimSayim` isimli bir de?i?ken bildirilmi? ve de?er (value) olarak ona bir say? de?i?mezi
// ?rne?imizde `2`) atanm??t?r.
let benimSayim = 2;
// `benimSayim` ? yeniden atar ve onun de?erini bir dizi de?i?mezi (?rne?imizde `"bir ?eyler"`) atar.
// JavaScript dinamik olarak yaz?lm?? bir dildir, bu nedenle bu y?nergelerine uygundur.
benimSayim = "bir ?eyler";
Yukar?daki ?rnekte, hepsinin ?nünde iki e?ik ?izgi bulunan yorumlara dikkat edin. JavaScript'te yerle?ik Giri?/??k?? (I/O) i?levi yoktur; ?al??ma zaman? ortam? bunu sa?lar. Sürüm 5.1'deki ECMAScript belirtimi ?unlar? belirtir:[67]
asl?nda, bu spesifikasyonda harici veri giri?i veya hesaplanan sonu?lar?n ??k??? i?in herhangi bir ?art yoktur.
Ancak, ?o?u ?al??ma zaman? ortam?nda ??kt? yazd?rmak i?in kullan?labilecek bir console
objesi [68] bulunur. ??te JavaScript'te minimalist bir Hello World program? :
console.log("Merhaba, Dünya!");
HTML belgelerinde bir ??kt? i?in bu program gereklidir:
// "write" metodu kullan?larak, metin nodu (dü?ümü) yaz?labilir.
document.write('bir ?eyler');
// HTML elementleri de olu?turulabilir. ?ncelikle DOM üzerinde olu?turulmalar? gerekir
const benimElementim = document.createElement('div');
// Class veya id gibi ?znitelikler olu?turulabilir.
benimElementim.classList.add('bir-seyler');
// benimElementim.classList.add("anotherclass");
benimElementim.id = 'baska-seyler';
// Burada, ?znitelik ??yle g?rünecektir: <span data-attr="baz"></span>
benimElementim.setAttribute('data-atrr', 'baz');
// Son olarak, onu HTML'deki <body> ??esine bir alt ??e olarak ekleyin
document.body.appendChild(benimElementim);
// Elementler bir ??e olarak querySelector ile yakalanabilir ya da forEach d?ngüsü ile al?nabilen birden ?ok ??e querySelectorAll ile yakalanabilir.
document.querySelector('.class');
document.querySelector('#id');
document.querySelector('[data-other]');
document.querySelectorAll('.multiple');
Basit bir ?zyinelemeli (recursive) fonksiyon:
function faktoriyel(n) {
if (n === 0)
return 1; // 0! = 1
return n * faktoriyel(n - 1);
}
faktoriyel(3); // 6 sonucunu d?ndürür
ya da a?a??daki ?rnekte oldu?u gibi fakt?riyel hesaplamas?n? kontroller ve ü?lü operat?r vas?tas?yla da kullanabilirsiniz.
function faktoriyel(n) {
// Yaln?zca pozitif bir say? kullan?lmas?na izin verin yoksa konsolda uyar? g?sterin.
if (isNaN(n)) {
console.error("Say?sal olmayan argümana izin verilmemektedir.");
return NaN; // bu ?zel bir de?erdir ve "Bu Bir Say? De?il" anlam?na gelir.
}
if (n === 0)
return 1; // 0! = 1
if ( n < 0)
return undefined; // Negatif say?lar de?er olarak verildi?inde 'tan?ms?z' bildirimi yap?n .
if (n % 1) {
console.warn(`Belirtti?iniz ${n} ondal?kl? de?eri en yak?n tam say?ya yuvarlanacakt?r. Tam say? olmayanlar i?in bunun yerine gamma fonksiyonunu kullanmay? dü?ünün.`);
n = Math.round(n);
}
// Yukar?daki kontrolleri kullanmak istemeyebilirsiniz. Zorunlu de?ildir. Bu k?s?mdan sonra ger?ek ?zyinelemeli faktoriyel hesaplama kodlar? yer almaktad?r.
// A?a??daki sat?rda ?zyinelemeleli fakt?riyel hesaplamada kullan?lan fonksiyon ifadesidir. ES6 ile birlikte tan?t?m? yap?lan ok fonksiyon s?z dizimini kullan?r.
const ozyinelemeli_hesaplama = a => a > 1 ? a * ozyinelemeli_hesaplama(a - 1) : 1; // '?' ile birlikte ü?lü operat?r kullan?m?na dikkat ediniz.
return ozyinelemeli_hesaplama(n);
}
document.write(faktoriyel(3)); // 6 d?ndürür
Anonim (isimsiz) bir fonksiyon (veya lambda):
let isimsizFonksiyon = () => console.log("?simsiz bir fonksiyon");
isimsizFonksiyon(); // "?simsiz bir fonksiyon" yaz?s?n? konsola getirir.
Bu ?rnek, JavaScript'te fonksiyon kapan??lar?n?n yerel olmayan de?i?kenlerini ba?vuru yoluyla yakalad???n? g?sterir.
Ok i?levleri ilk olarak 6. Bask? - ECMAScript 2015'te tan?t?ld?. JavaScript'te i?lev yazmak i?in s?zdizimini k?salt?rlar. Ok i?levleri anonimdir, bu nedenle olu?turulduktan sonra onlar? ?a??rmak i?in bunlara ba?vurmak i?in bir de?i?ken gerekir.
Ok i?levi (arrow fonksiyon) ?rne?i:
// Ok fonksiyonlar? (arrow functions) `function` anahtar s?zcü?ünü kullanmadan
// fonskiyon yazmam?za izin verir.
// Buradaki `uzun_ornek` bir anonymous function value sunu g?sterir.
const uzun_ornek = (giris1, giris2) => {
console.log("Merhaba, Dünya!");
const cikti = giris1 + giris2;
return cikti;
};
// Parantez yoksa, ok fonksiyonu yaln?zca ifadeyi (expression) d?ndürür
// Buradaki gibi (giris1 + giris2)
const kisa_ornek = (giris1, giris2) => giris1 + giris2;
console.log(kisa_ornek(2, 3)); // 5 d?ndürür ve ard?ndan "Merhaba, Dünya!" yazd?r?r
console.log(uzun_ornek(2, 5)); // 7 d?ndürür
// Bir ok fonksiyonunun yaln?zca bir parametresi varsa, parantezler kald?r?labilir.
const parantezsiz = giris => giris + 2;
console.log(parantezsiz(3)); // 5 d?ndürür
JavaScript'te objeler, fonskiyonlarla ayn? ?ekilde olu?turulur; bu nedenle ojbeler bir fonksiyon objesi olarak bilinirler.
Obje ?rne?i:
let kullanici = {
adi: "Ahmet",
yasi: 41,
selamVer() {
// "this" burada "mevcut obje" dir
alert(this.adi);
}
};
kullanici.selamVer(); // Ahmet
De?i?ken fonksiyon g?sterimi (arguments
?zel bir de?i?kendir):[69]
function topla() {
let x = 0;
for (let i = 0; i < arguments.length; ++i)
x += arguments[i];
return x;
}
console.log(topla(1, 2)); // 3 d?ndürür
console.log(topla(1, 2, 3)); // 6 d?ndürür
An?nda ?a?r?lan fonksiyon ifadeleri genellikle kapan??lar? (closures) olu?turmak i?in kullan?l?r. Kapan??lar, ?zelliklerin (properties) ve metotlar?n bir ad alan?nda (namespace) toplanmas?na ve baz?lar?n?n ?zel hale getirilmesine izin verir:
let sayac = (function() {
let i = 0; // ?zel ?zellik
return { // genel metotlar
get: function() {
alert(i);
},
set: function(deger) {
i = deger;
},
artir: function() {
alert(++i);
}
};
})(); // modül
sayac.get(); // 0 g?sterir
sayac.set(6);
sayac.artir(); // 7 g?sterir
sayac.artir(); // 8 g?sterir
JavaScript'te modülleri d??a ve i?e aktarma [70]
Export ?rne?i:
/* mymodule.js */
// Bu fonksiyon (i?lev), d??a aktar?lmad??? i?in ?zel olarak kal?r
let topla = (a, b) => {
return a + b;
}
// De?i?kenleri d??a aktar
export let adi = 'Metin';
export let yasi = 23;
// De?i?kenleri adlar?yla/adland?r?lm?? olarak d??a aktar
export function ekle(sayi1, sayi2) {
return sayi1 + sayi2;
}
// Class (s?n?f?n) d??a aktar?lmas?
export class Carpma {
constructor(sayi1, sayi2) {
this.sayi1 = sayi1;
this.sayi2 = sayi2;
}
ekle() {
return topla(this.sayi1, this.sayi2);
}
}
?mport ?rne?i:
// Bir ?zelli?i i?e dahil etme/i?e aktarma
import { ekle } from './mymodule.js';
console.log(ekle(1, 2));
//> 3
// ?oklu ?ekilde ?zellikleri i?e dahil etme/i?e aktarma
import { adi, yasi } from './mymodule.js';
console.log(adi, yasi);
//> "Metin", 23
// Bir modüldeki tüm ?zellikleri dahil etme/i?e aktarma
import * from './module.js'
console.log(adi, yasi);
//> "Metin", 23
console.log(ekle(1,2));
//> 3
Daha geli?mi? ?rnek
[de?i?tir | kayna?? de?i?tir]/* ?ki say?n?n en kü?ük ortak kat?n? (LCM) bulur */
function LCMCalculator(x, y) { // yap?c?/kurucu fonksiyon
if (isNaN(x*y)) throw new TypeError("Say?sal olmayan ba??ms?z de?i?kenlere izin verilmemektedir.");
const checkInt = function(x) { // i? fonksiyon
if (x % 1 !== 0)
throw new TypeError(x + " bir tam say? de?il");
return x;
};
this.a = checkInt(x)
// noktal? virgül kullan?m? ^^^^ iste?e ba?l?d?r, yeni sat?r yeterlidir
this.b = checkInt(y);
}
// Bir yap?c?/kurucu taraf?ndan olu?turulan obje ?rneklerinin prototipi,
// o yap?c?/kurucunun "prototip" ?zelli?idir.
LCMCalculator.prototype = { // obje de?i?mezi
constructor: LCMCalculator, // bir prototipi yeniden atarken, yap?c?/kurucu ?zelli?ini uygun ?ekilde ayarlay?n
gcd: function() { // en büyük ortak b?leni hesaplayan y?ntem
// E?klid algoritmas?:
let a = Math.abs(this.a), b = Math.abs(this.b), t;
if (a < b) {
// de?i?kenlerin takas edilmesi
// t = b; b = a; a = t;
[a, b] = [b, a]; // destructuring (y?k?m) atamas?n? kullanarak takas (ES6)
}
while (b !== 0) {
t = b;
b = a % b;
a = t;
}
// Ortak B?leni (GCD) yaln?zca bir kez hesaplaman?z gerekir, bu nedenle bu y?ntemi "yeniden tan?mlay?n".
// (Asl?nda yeniden tan?mlama de?ildir - ?rne?in kendisinde tan?mlan?r,
// b?ylece this.gcd, LCMCalculator.prototype.gcd yerine bu "yeniden
// tan?mlamaya" at?fta bulunur.)
// LCMCalculator obje üyeleri "a" ve/veya "b" sonradan de?i?tirilirse
// bunun yanl?? bir sonuca yol a?aca??n? unutmay?n.
// Ayr?ca, 'gcd' === "gcd", this['gcd'] === this.gcd
this['gcd'] = function() {
return a;
};
return a;
},
// Obje/Nesne ?zellik adlar?, ?ift (") veya tek (') t?rnak ile s?n?rlanan stringler ile belirtilebilir.
"lcm": function() {
// De?i?ken adlar? nesne/obje ?zellikleriyle ?ak??maz, ?rne?in |lcm|, |this.lcm| de?ildir.
// FP hassas sorunlar?ndan ka??nmak i?in |this.a*this.b| ?eklinde kullanm?yoruz
let lcm = this.a / this.gcd() * this.b;
// lcm'yi yaln?zca bir kez hesaplaman?z gerekir, bu nedenle bu metodu "yeniden tan?mlay?n".
this.lcm = function() {
return lcm;
};
return lcm;
},
// Metotlar ayr?ca es6 s?zdizimi kullan?larak da bildirilebilir
toString() {
// De?erleri birle?tirmek i?in hem es6 ?ablon de?i?mezlerini
// hem de (+) operat?rünü kullanma
return `LCMCalculator: a = ${this.a}, b = ` + this.b;
}
};
// Genel ??kt? fonksiyonu tan?mlay?n; bu uygulama yaln?zca Web taray?c?lar? i?in ?al???r
function output(x) {
document.body.appendChild(document.createTextNode(x));
document.body.appendChild(document.createElement('br'));
}
// Not: Dizilerin (array) map() ve forEach() metotlar?, JavaScript 1.6'da tan?mlanm??t?r.
// Burada JavaScript'in do?al fonksiyonel/i?levsel yap?s?n? g?stermek i?in kullan?l?rlar.
[
[25, 55],
[21, 56],
[22, 58],
[28, 56]
].map(function(pair) { // array literal (dizi de?i?mezi) + mapping function (map/e?leme fonksiyonu)
return new LCMCalculator(pair[0], pair[1]);
}).sort((a, b) => a.lcm() - b.lcm()) // bu kar??la?t?rmal? fonksiyonla s?ralama yap?n; =>, "ok fonksiyonu" bir fonksiyonun k?sa bi?imidir.
.forEach(printResult);
function printResult(obj) {
output(obj + ", gcd = " + obj.gcd() + ", lcm = " + obj.lcm());
}
Taray?c? penceresinde a?a??daki ??kt? g?rüntülenmelidir.
LCMCalculator: a = 28, b = 56, gcd = 28, lcm = 56
LCMCalculator: a = 21, b = 56, gcd = 7, lcm = 168
LCMCalculator: a = 25, b = 55, gcd = 5, lcm = 275
LCMCalculator: a = 22, b = 58, gcd = 2, lcm = 638
Güvenlik
[de?i?tir | kayna?? de?i?tir]JavaScript ve DOM, k?tü niyetli yazarlara Web arac?l???yla bir istemci bilgisayarda ?al??t?r?lacak komut dosyalar? sunma potansiyeli sa?lar. Taray?c? yazarlar?, iki k?s?tlama kullanarak bu riski en aza indirir. ?lk olarak, komut dosyalar?, dosya olu?turma gibi genel ama?l? programlama g?revlerini de?il, yaln?zca Web ile ilgili eylemleri ger?ekle?tirebilecekleri bir sanal alanda ?al???r. ?kinci olarak, komut dosyalar? ayn? kaynak ilkesiyle s?n?rland?r?lm??t?r: bir Web sitesindeki komut dosyalar?, ba?ka bir siteye g?nderilen kullan?c? adlar?, parolalar veya tan?mlama bilgileri gibi bilgilere eri?emez. JavaScript ile ilgili güvenlik hatalar?n?n ?o?u, ayn? kaynak politikas?n?n veya sanal alan?n ihlali ile ger?ekle?mektedir.
Genel JavaScript'in alt kümeleri (ADsafe, Secure ECMAScript (SES)), ?zellikle ü?üncü taraflarca olu?turulan kodlarda (reklamlar gibi) daha yüksek düzeyde güvenlik sa?lar.[71][72] Closure Toolkit, ü?üncü taraf JavaScript ve HTML'nin güvenli bir ?ekilde yerle?tirilmesi ve yal?t?lmas? i?in ba?ka bir projedir.[73]
??erik Güvenli?i Politikas?, bir Web sayfas?nda yaln?zca güvenilir kodun yürütülmesini sa?laman?n ana y?ntemi ve amac?d?r.
Siteler aras? güvenlik a??klar?
[de?i?tir | kayna?? de?i?tir]JavaScript ile ilgili yayg?n bir güvenlik sorunu, ayn? kaynak ilkesinin ihlali olan siteler aras? komut dosyas? ?al??t?rmad?r (XSS). XSS güvenlik a??klar?, bir sald?rgan ?evrimi?i bankac?l?k web sitesi gibi hedeflenen bir Web sitesinin kurbana sunulan web sayfas?na k?tü ama?l? bir komut dosyas? eklemesine neden oldu?unda ortaya ??kar. Bu ?rnekteki komut dosyas? daha sonra kurban?n ayr?cal?klar?yla bankac?l?k uygulamas?na eri?ebilir, potansiyel olarak gizli bilgileri if?a edebilir veya kurban?n izni olmadan para transfer edebilir. XSS güvenlik a??klar?na bir ??züm, güvenilmeyen verileri g?rüntülerken HTML ??k???n? kullanmakt?r.
Baz? taray?c?lar, sald?rgan?n k?tü ama?l? komut dosyas? i?eren bir URL sa?lad???nda yans?yan XSS sald?r?lar?na kar?? k?smi koruma i?erir. Ancak, bu taray?c?lar?n kullan?c?lar? bile, k?tü ama?l? kodun bir veritaban?nda depoland??? sald?r?lar gibi di?er XSS sald?r?lar?na kar?? savunmas?zd?r. Yaln?zca sunucu taraf?nda Web uygulamalar?n?n do?ru tasar?m? XSS'yi tamamen ?nleyebilir.
Taray?c? yazarlar?n?n uygulama hatalar? nedeniyle de XSS güvenlik a??klar? olu?abilir.[74]
Bir ba?ka siteler aras? güvenlik a????, siteler aras? istek sahtecili?idir (CSRF). CSRF'de, bir sald?rgan?n sitesindeki kod, kurban?n taray?c?s?n?, kullan?c?n?n hedef sitede ama?lamad??? eylemleri ger?ekle?tirmesi i?in kand?r?r (bir bankada para transferi gibi). Hedef siteler, istek do?rulamas? i?in yaln?zca tan?mlama bilgilerine güvendi?inde, sald?rgan?n sitesindeki koddan kaynaklanan istekler, ba?latan kullan?c?n?n ayn? ge?erli oturum a?ma bilgilerini ta??yabilir. Genel olarak, CSRF'nin ??zümü, kal?c? etkileri olabilecek herhangi bir iste?in kimli?ini do?rulamak i?in yaln?zca ?erezlerde de?il, gizli bir form alan?nda bir kimlik do?rulama de?eri talep etmektir. HTTP Y?nlendiren ba?l???n? kontrol etmek de yard?mc? olabilir.
"JavaScript ele ge?irme", bir sald?rgan?n sitesindeki <script>
etiketinin, kurban?n sitesinde JSON veya JavaScript gibi ?zel bilgiler d?ndüren bir sayfadan yararland??? bir CSRF sald?r?s? türüdür. Olas? ??zümler ?unlar? i?erir:
- ?zel bilgi d?ndüren herhangi bir yan?t i?in POST ve GET parametrelerinde bir kimlik do?rulama belirteci eklemek.
Mü?teriye duyulan yanl?? güven
[de?i?tir | kayna?? de?i?tir]?stemci-sunucu uygulamalar?n?n geli?tiricileri, güvenilmeyen istemcilerin sald?rganlar?n denetimi alt?nda olabilece?ini bilmelidir. Uygulama yazar?, JavaScript kodunun ama?land??? gibi (veya hi?) ?al??aca??n? varsayamaz ?ünkü koda g?mülü herhangi bir s?r, belirli bir dü?man taraf?ndan ay?klanabilir. Baz? ??kar?mlar ?unlard?r:
- Web sitesi yazarlar?, ham kaynak kodunun istemciye g?nderilmesi gerekti?inden JavaScript'lerinin nas?l ?al??t???n? tam olarak gizleyemezler. Kod gizlenebilir, ancak ?a??rtma tersine mühendislikle yap?labilir.
- JavaScript form do?rulamas? güvenlik de?il, yaln?zca kullan?c?lar i?in kolayl?k sa?lar. Bir site, kullan?c?n?n hizmet ?artlar?n? kabul etti?ini do?rularsa veya yaln?zca say? i?ermesi gereken alanlardan ge?ersiz karakterleri filtrelerse, bunu yaln?zca istemcide de?il sunucuda yapmal?d?r.
- Komut dosyalar? se?ici olarak devre d??? b?rak?labilir, bu nedenle bir g?rüntüyü kaydetmek i?in sa? t?klamak gibi i?lemleri ?nlemek i?in JavaScript'e güvenilemez.[75]
- Bir sald?rgan taraf?ndan ay?klanabilece?inden, ?ifreler gibi hassas bilgileri JavaScript'e g?mmek ?ok k?tü bir uygulama olarak kabul edilir.[76]
Geli?tiricilere duyulan yanl?? güven
[de?i?tir | kayna?? de?i?tir]Npm ve Bower gibi paket y?netim sistemleri, JavaScript geli?tiricileri aras?nda popülerdir. Bu tür sistemler, bir geli?tiricinin, programlar?n?n di?er geli?tiricilerin program kitapl?klar?na olan ba??ml?l?klar?n? kolayca y?netmesine izin verir. Geli?tiriciler, kitapl?klar?n koruyucular?n?n onlar? güvenli ve güncel tutaca??na güvenirler, ancak bu her zaman b?yle de?ildir. Bu k?r güven nedeniyle bir güvenlik a???? ortaya ??kt?. Güvenilir kitapl?klar, kitapl?klara dayanan tüm programlarda hatalar?n veya güvenlik a??klar?n?n ortaya ??kmas?na neden olan yeni sürümlere sahip olabilir. Yani bir kitapl?k vah?i do?ada bilinen güvenlik a??klar?yla yamas?z kalabilir. 133 bin web sitesi ?rne?i incelenmi? bir ?al??mada, ara?t?rmac?lar web sitelerinin %37'sinin bilinen en az bir güvenlik a????na sahip bir kitapl?k i?erdi?ini buldu.[77] "Her web sitesinde kullan?lan en eski kütüphane sürümü ile bu kütüphanenin mevcut en yeni sürümü aras?ndaki ortalama gecikme, ALEXA'da 1.177 gündür ve halen aktif olarak kullan?lan baz? kütüphanelerin geli?tirilmesi y?llar ?nce durduruldu." [77] Ba?ka bir olas?l?k, bir kütüphanenin y?neticisinin kütüphaneyi tamamen kald?rabilmesidir. Bu, Mart 2016'da Azer Ko?ulu'nun deposunu npm'den kald?rmas?yla meydana geldi. Bu, kütüphanelerine ba?l? on binlerce program?n ve web sitesinin bozulmas?na neden oldu.[78]
Taray?c? ve eklenti kodlama hatalar?
[de?i?tir | kayna?? de?i?tir]JavaScript, baz?lar? arabellek ta?malar? gibi kusurlara sahip olabilen ?ok ?e?itli taray?c? yetenekleri i?in bir arabirim sa?lar. Bu kusurlar, sald?rganlar?n kullan?c?n?n sisteminde istedikleri herhangi bir kodu ?al??t?racak komut dosyalar? yazmas?na izin verebilir. Bu kod hi?bir ?ekilde ba?ka bir JavaScript uygulamas?yla s?n?rl? de?ildir. ?rne?in, arabellek ta?mas? istismar?, bir sald?rgan?n süper kullan?c? ayr?cal?klar?yla i?letim sisteminin API'sine eri?mesine izin verebilir.
Bu kusurlar Firefox, Internet Explorer,[79] ve Safari gibi büyük taray?c?lar? etkilemi?tir.
Video oynat?c?lar, Adobe Flash ve Microsoft Internet Explorer'da varsay?lan olarak etkinle?tirilen ?ok ?e?itli ActiveX denetimleri gibi eklentiler, JavaScript arac?l???yla yararlan?labilen kusurlara da sahip olabilir (bu tür kusurlardan ge?mi?te yararlan?lm??t?r).
Windows Vista'da Microsoft, Internet Explorer i?lemini s?n?rl? ayr?cal?klarla ?al??t?rarak arabellek ta?malar? gibi hata risklerini kontrol alt?na almaya ?al??m??t?r.[80] Google Chrome benzer ?ekilde sayfa olu?turucular?n? kendi " sandbox "lar?yla s?n?rlar.
Korumal? alan uygulama hatalar?
[de?i?tir | kayna?? de?i?tir]Web taray?c?lar?, ?rne?in dosya olu?turmak veya silmek i?in gerekli ayr?cal?klarla birlikte JavaScript'i sanal alan?n d???nda ?al??t?rabilir. Bu tür ayr?cal?klar?n Web'den koda verilmesi ama?lanmam??t?r.
Web'den JavaScript'e yanl?? ayr?cal?klar verilmesi, hem Internet Explorer hem de Firefox'taki güvenlik a??klar?nda rol oynam??t?r. Windows XP Service Pack 2'de Microsoft, Internet Explorer'da JScript'in ayr?cal?klar?n? dü?ürmü?tür.[81]
Microsoft Windows, bir bilgisayar?n sabit sürücüsündeki JavaScript kaynak dosyalar?n?n genel ama?l?, korumal? alanda olmayan programlar olarak ba?lat?lmas?na izin verir (bkz: Windows Komut Dosyas? Ana Bilgisayar? ). Bu, JavaScript'i ( VBScript gibi) bir Truva at? i?in teorik olarak uygun bir vekt?r yapar, ancak JavaScript Truva atlar? pratikte nadirdir.[82]
Donan?m a??klar?
[de?i?tir | kayna?? de?i?tir]2015 y?l?nda, güvenlik ara?t?rmac?lar? taraf?ndan bir makalede, bir Rowhammer sald?r?s?n?n JavaScript tabanl? bir kavram kan?t? uygulamas? a??klanm??t?r.[83][84][85]
2017 y?l?nda, taray?c? üzerinden JavaScript tabanl? bir sald?r?n?n ASLR'yi atlayabilece?i g?sterildi. Buna "ASLR⊕Cache" veya AnC denir.
2018'de Intel ve di?er i?lemcilerde Spekülatif Yürütmeye kar?? Spectre sald?r?lar?n? a??klayan makale bir JavaScript uygulamas?n? i?eriyordu.
Geli?tirme ara?lar?
[de?i?tir | kayna?? de?i?tir]?nemli ara?lar dil ile birlikte geli?mi?tir.
- Her büyük web taray?c?s?nda, JavaScript hata ay?klay?c? dahil olmak üzere yerle?ik web geli?tirme ara?lar? bulunur.
- ESLint ve JSLint gibi statik program analiz ara?lar?, bir dizi standart ve y?nergeye uygunluk i?in JavaScript kodunu tarar.
- Baz? taray?c?larda yerle?ik profil olu?turucular bulunur. Benchmark.js ve jsbench gibi ba??ms?z profil olu?turma kitapl?klar? da olu?turulmu?tur.[86][87]
- Bir?ok metin düzenleyici (IDE), JavaScript kodu i?in s?zdizimi vurgulama deste?ine sahiptir.
?lgili teknolojiler
[de?i?tir | kayna?? de?i?tir]
Java
[de?i?tir | kayna?? de?i?tir]Yayg?n bir yan?lg?, JavaScript'in Java ile ayn? oldu?una y?neliktir. Her ikisinin de ger?ekten de C-benzeri bir s?zdizimi vard?r (C dili onlar?n en yak?n ortak ata dilidir). Ayr?ca, genellikle korumal? alana al?n?rlar (bir taray?c? i?inde kullan?ld???nda) ve JavaScript, Java'n?n s?zdizimi ve standart kitapl??? g?z ?nünde bulundurularak tasarlanm??t?r. ?zellikle, tüm Java anahtar s?zcükleri orijinal JavaScript'te ayr?lm??t?r, JavaScript'in standart kitapl??? Java'n?n adland?rma kurallar?n? takip eder ve JavaScript'in ?Math?
ve ?Date?
objeleri Java 1.0'dan al?nan s?n?flara dayan?r.[88]
Java ve JavaScript ilk olarak 1995'te ortaya ??kt?, ancak Java Sun Microsystems'den James Gosling ve JavaScript ise Netscape Communications'dan Brendan Eich taraf?ndan geli?tirildi.
?ki dil aras?ndaki farkl?l?klar benzerliklerinden daha belirgindir. Java'n?n statik yaz?m? vard?r, JavaScript'in yaz?m? ise dinamiktir. Java, derlenmi? bayt kodundan yüklenirken JavaScript, insan taraf?ndan okunabilir kaynak kodu olarak yüklenir. Java'n?n objeleri s?n?f tabanl?d?r, JavaScript'ler ise prototip tabanl?d?r. Son olarak, Java, Java 8'e kadar i?levsel programlamay? desteklemezken, JavaScript, Scheme'den etkilenerek bunu ba??ndan beri yapm??t?r.
JSON
[de?i?tir | kayna?? de?i?tir]JSON veya JavaScript Object Notation, JavaScript'in obje de?i?mez s?zdiziminin bir alt kümesi olarak tan?mlanan genel ama?l? bir veri de?i?im bi?imidir.
TypeScript
[de?i?tir | kayna?? de?i?tir]TypeScript (TS), Microsoft taraf?ndan geli?tirilmekte ve desteklenmektedir.[89] TS, JavaScript'in kat? ?ekilde (strictly-typed) yaz?lan versiyonudur. TS, de?i?kenlere ve fonksiyonlara, tür a??klamalar? ekleyerek farkl?l?klar? g?sterir ve JS i?inde türlerin tan?mlanmas? i?in bir tan?t?m dilidir. Bunun d???nda TS, JS ile istemci taraf?nda ?al??t?r?lmas?, kolay, anla??l?r bir ?ekilde aktar?lmas?na izin vermek ve di?er JS kodlar?yla birlikte ?al??abilmesi i?in hemen hemen ayn? ?zellik setini payla??r.[90]
WebAssembly
[de?i?tir | kayna?? de?i?tir]2017'den beri web taray?c?lar?, bir JavaScript motorunun web sayfas? komut dosyalar?n?n performans a??s?ndan kritik b?lümlerini yerel h?za yak?n yürütmesini sa?layan ikili bir bi?im olan WebAssembly'yi desteklemektedir.[91] WebAssembly kodu, normal JavaScript koduyla ayn? sanal alanda ?al???r.
asm.js, WebAssembly'nin ?ncüsü olarak hizmet veren bir JavaScript alt kümesidir.[92]
Aktar?c?lar (Transpilers)
[de?i?tir | kayna?? de?i?tir]JavaScript, Web'in bask?n istemci taraf? dilidir ve bir?ok web sitesi komut dosyas? a??rl?kl?d?r. Bu nedenle, geli?tirme sürecine yard?mc? olabilecek di?er dillerde yaz?lm?? kodu d?nü?türmek i?in aktar?c?lar olu?turulmu?tur.[36]
Kaynak?a
[de?i?tir | kayna?? de?i?tir]- ^ Press release announcing JavaScript, "Netscape and Sun announce JavaScript", PR Newswire, December 4, 1995
- ^ "ECMAScript? 2024 Language Specification". Haziran 2024. Eri?im tarihi: 30 A?ustos 2024.
- ^ "ECMAScript? 2025 Language Specification". 27 Mart 2024. Eri?im tarihi: 17 Nisan 2024.
- ^ Seibel, Peter (16 Eylül 2009). Coders at Work: Reflections on the Craft of Programming. ISBN 9781430219484. 24 Aral?k 2020 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 25 Aral?k 2018.
Eich: The immediate concern at Netscape was it must look like Java.
- ^ a b c d e "Chapter 4. How JavaScript Was Created". speakingjs.com. 27 ?ubat 2020 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 21 Kas?m 2017.
- ^ "Popularity – Brendan Eich". 3 Temmuz 2011 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 18 Mart 2022.
- ^ "Brendan Eich: An Introduction to JavaScript, JSConf 2010". YouTube. s. 22m. 29 A?ustos 2020 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 25 Kas?m 2019.
Eich: "function", eight letters, I was influenced by AWK.
- ^ Eich, Brendan (1998). "Foreword". Goodman, Danny (Ed.). JavaScript Bible (3. bas.). John Wiley & Sons. ISBN 0-7645-3188-3. LCCN 97078208. OCLC 38888873. OL 712205M.
- ^ "nodejs/node-eps". GitHub. 29 A?ustos 2020 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 5 Temmuz 2018.
- ^ "JavaScript". dictionary.com. 9 A?ustos 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 9 A?ustos 2021.
- ^ JavaScript: the definitive guide (?ngilizce). Beijing; Farnham: O'Reilly. 18 Nisan 2011. s. 1. ISBN 978-1-4493-9385-4. OCLC 686709345. 14 ?ubat 2022 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 18 Mart 2022.
JavaScript is part of the triad of technologies that all Web developers must learn: HTML to specify the content of web pages, CSS to specify the presentation of web pages, and JavaScript to specify the behavior of web pages.
- ^ a b "Usage statistics of JavaScript as client-side programming language on websites". w3techs.com. 13 A?ustos 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 9 Nisan 2021.
- ^ a b c d "Usage statistics of JavaScript libraries for websites". w3techs.com. 23 Eylül 2018 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 9 Nisan 2021.
- ^ "ECMAScript? 2020 Language Specification". 8 May?s 2020 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 8 May?s 2020.
- ^ "Bloomberg Game Changers: Marc Andreessen". Bloomberg. 17 Mart 2011. 16 May?s 2012 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 7 Aral?k 2011.
- ^ "The Evolution of the Web Browsers". Monmouth Web Developers. 31 A?ustos 2018. 31 A?ustos 2018 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 31 A?ustos 2018.
- ^ "Learn the History of Web Browsers". washingtonindependent.com. 31 A?ustos 2018. 3 Aral?k 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 31 A?ustos 2018.
- ^ "TechVision: Innovators of the Net: Brendan Eich and JavaScript". 8 ?ubat 2008 tarihinde kayna??ndan ar?ivlendi.
- ^ Brendan Eich – CEO of Brave, 17 Haziran 2016, 10 ?ubat 2019 tarihinde kayna??ndan ar?ivlendi7 ?ubat 2018
- ^ a b "Chapter 5. Standardization: ECMAScript". speakingjs.com. 1 Kas?m 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 1 Kas?m 2021.
- ^ a b "JavaScript, How Did We Get Here?". archive.oreilly.com. 6 Nisan 2001. 19 Temmuz 2016 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 16 Temmuz 2016.
- ^ "Microsoft Internet Explorer 3.0 Beta Now Available". news.microsoft.com. Microsoft. 29 May?s 1996. 24 Kas?m 2020 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 16 Temmuz 2016.
- ^ "The Unwelcome Return of "Best Viewed with Internet Explorer"". technologizer.com. 16 Eylül 2010. 23 Haziran 2018 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 16 Temmuz 2016.
- ^ Baker (24 Kas?m 2004). "Mozilla Firefox Internet Browser Market Share Gains to 7.4%". Search Engine Journal. 7 May?s 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 8 May?s 2021.
- ^ Weber (9 May?s 2005). "The assault on software giant Microsoft". BBC News. 25 Eylül 2017 tarihinde kayna??ndan ar?ivlendi.
- ^ "Big browser comparison test: Internet Explorer vs. Firefox, Opera, Safari and Chrome". PC Games Hardware. Computec Media AG. 3 Temmuz 2009. 1 May?s 2012 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 28 Haziran 2010.
- ^ "Lifehacker Speed Tests: Safari 4, Chrome 2". Lifehacker. 11 Haziran 2009. 14 Nisan 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 8 May?s 2021.
- ^ "TraceMonkey: JavaScript Lightspeed, Brendan Eich's Blog". 4 Aral?k 2015 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 22 Temmuz 2020.
- ^ "Mozilla asks, 'Are we fast yet?'". Wired. 22 Haziran 2018 tarihinde kayna??ndan ar?ivlendi18 Ocak 2019.
- ^ "ECMAScript 6: New Features: Overview and Comparison". es6-features.org. 18 Mart 2018 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 19 Mart 2018.
- ^ "The secret history behind the success of npm and Node". TheServerSide. 19 Temmuz 2018. 2 A?ustos 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 2 A?ustos 2021.
- ^ "State of the Union: npm". Linux.com. 13 Ocak 2017. 2 A?ustos 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 2 A?ustos 2021.
- ^ a b "JavaScript Standard Moves to Yearly Release Schedule; Here is What's New for ES16". The New Stack. 4 May?s 2016. 16 Ocak 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 15 Ocak 2021.
- ^ "The TC39 Process". tc39.es. Ecma International. 7 ?ubat 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 15 Ocak 2021.
- ^ "ECMAScript proposals". TC39. 4 Aral?k 2020 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 15 Ocak 2021.
- ^ a b "List of languages that compile to JS". GitHub. 31 Ocak 2020 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 6 ?ubat 2020.
- ^ "U.S. Trademark Serial No. 75026640". United States Patent and Trademark Office. 13 Temmuz 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 8 May?s 2021.
- ^ "Legal Notices". Oracle Corporation. 5 Haziran 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 8 May?s 2021.
- ^ "Vanilla JS". vanilla-js.com. 16 Haziran 2020 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 17 Haziran 2020.
- ^ "Server-Side JavaScript Guide". Oracle Corporation. 11 Aral?k 1998. 11 Mart 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 8 May?s 2021.
- ^ "Introducing JScript .NET". Microsoft Developer Network. Microsoft. 14 Temmuz 2000. 10 Kas?m 2017 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 10 Nisan 2018.
[S]ince the 1996 introduction of JScript version 1.0 ... we've been seeing a steady increase in the usage of JScript on the server—particularly in Active Server Pages (ASP)
- ^ a b "Server-Side JavaScript, Back with a Vengeance". readwrite.com. 17 Aral?k 2009. 17 Haziran 2016 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 16 Temmuz 2016.
- ^ "JavaScript for Acrobat". 7 A?ustos 2009 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 18 A?ustos 2009.
- ^ "Answering the question: "How do I develop an app for GNOME?"". 11 ?ubat 2013 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 7 ?ubat 2013.
- ^ "Tessel 2... Leverage all the libraries of Node.JS to create useful devices in minutes with Tessel". 26 May?s 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 8 May?s 2021.
- ^ "Node.js Raspberry Pi GPIO Introduction". 13 A?ustos 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 3 May?s 2020.
- ^ "Espruino – JavaScript for Microcontrollers". 1 May?s 2020 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 3 May?s 2020.
- ^ JavaScript: The Definitive Guide: The Definitive Guide. "O'Reilly Media, Inc.". 17 A?ustos 2006. s. 16. ISBN 978-0-596-55447-7. 1 A?ustos 2020 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 29 Mart 2019.
- ^ a b c d "JavaScript quirks in one image from the Internet". The DEV Community (?ngilizce). 28 Ekim 2019 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 28 Ekim 2019.
- ^ "Wat". destroyallsoftware.com. 28 Ekim 2019 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 28 Ekim 2019.
- ^ "JavaScript data types and data structures – JavaScript | MDN". developer.mozilla.org. 16 ?ubat 2017. 14 Mart 2017 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 24 ?ubat 2017.
- ^ a b Flanagan 2006.
- ^ "Inheritance and the prototype chain". Mozilla Developer Network. Mozilla. 25 Nisan 2013 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 6 Nisan 2013.
- ^ Effective JavaScript. Addison-Wesley. 2013. s. 83. ISBN 978-0-321-81218-6.
- ^ Eloquent JavaScript. No Starch Press. 2011. ss. 95-97. ISBN 978-1-59327-282-1.
- ^ "Understanding "Prototypes" in JavaScript". 12 A?ustos 2011. 5 Nisan 2013 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 6 Nisan 2013.
- ^ Effective JavaScript. Addison-Wesley. 2013. ss. 125-127. ISBN 978-0-321-81218-6.
- ^ "Function – JavaScript". MDN Web Docs (?ngilizce). 30 Ekim 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 30 Ekim 2021.
- ^ "Properties of the Function Object". Es5.github.com. 28 Ocak 2013 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 26 May?s 2013.
- ^ "Home | CocktailJS". cocktailjs.github.io. 4 ?ubat 2017 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 24 ?ubat 2017.
- ^ "Concurrency model and Event Loop". Mozilla Developer Network. 5 Eylül 2015 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 28 A?ustos 2015.
- ^ Eloquent JavaScript. No Starch Press. 2011. ss. 139-149. ISBN 978-1-59327-282-1.
- ^ "E4X – Archive of obsolete content | MDN". Mozilla Developer Network. Mozilla Foundation. 14 ?ubat 2014. 24 Temmuz 2014 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 13 Temmuz 2014.
- ^ "var – JavaScript – MDN". The Mozilla Developer Network. 23 Aral?k 2012 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 22 Aral?k 2012.
- ^ "let". MDN web docs. Mozilla. 28 May?s 2019 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 27 Haziran 2018.
- ^ "const". MDN web docs. Mozilla. 28 Haziran 2018 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 27 Haziran 2018.
- ^ "ECMAScript Language Specification – ECMA-262 Edition 5.1". Ecma International. 26 Kas?m 2012 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 22 Aral?k 2012.
- ^ "console". Mozilla Developer Network. Mozilla. 28 ?ubat 2013 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 6 Nisan 2013.
- ^ "arguments". Mozilla Developer Network. Mozilla. 13 Nisan 2013 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 6 Nisan 2013.
- ^ "Import & Export Modules in javascript". learnersbucket.com. 23 Nisan 2019 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 23 Nisan 2019.
- ^ "Making JavaScript Safe for Advertising". ADsafe. 6 Temmuz 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 8 May?s 2021.
- ^ "Secure ECMA Script (SES)". 15 May?s 2013 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 26 May?s 2013.
- ^ "Google Caja Project". Google. 22 Ocak 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 9 Temmuz 2021.
- ^ "Mozilla Cross-Site Scripting Vulnerability Reported and Fixed – MozillaZine Talkback". mozillazine.org. 22 A?ustos 2011 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 24 ?ubat 2017.
- ^ "Right-click "protection"? Forget about it". 17 Haziran 2008. ISSN 1797-1993. 9 A?ustos 2011 tarihinde kayna??ndan ar?ivlendi17 Haziran 2008.
- ^ "Why You Should Never Put Sensitive Data in Your JavaScript". ServiceObjects Blog. ServiceObjects. 3 Haziran 2019 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 3 Haziran 2019.
- ^ a b "Thou Shalt Not Depend on Me: Analysing the Use of Outdated JavaScript Libraries on the Web" (PDF). Proceedings 2017 Network and Distributed System Security Symposium. 21 Aral?k 2016. doi:10.14722/ndss.2017.23414. ISBN 978-1-891562-46-4. 29 Mart 2017 tarihinde kayna??ndan (PDF) ar?ivlendi. Eri?im tarihi: 22 ?ubat 2017.
- ^ Collins (27 Mart 2016). "How one programmer broke the internet by deleting a tiny piece of code". Quartz. 22 ?ubat 2017 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 22 ?ubat 2017.
- ^ "Buffer-overflow bug in IE". CNET. 19 A?ustos 1998. 25 Aral?k 2002 tarihinde kayna??ndan ar?ivlendi.
- ^ "Protected Mode in Vista IE7 – IEBlog". blogs.msdn.com. 9 ?ubat 2006. 23 Ocak 2010 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 24 ?ubat 2017.
- ^ "Part 5: Enhanced Browsing Security". Microsoft Docs. Changes to Functionality in Windows XP Service Pack 2. 9 A?ustos 2004. 20 Ekim 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 20 Ekim 2021.
- ^ For one example of a rare JavaScript Trojan Horse, see Symantec Corporation, JS. 13 Eylül 2011 tarihinde Wayback Machine sitesinde ar?ivlendi.
- ^ Jean-Pharuns (30 Temmuz 2015). "Rowhammer.js Is the Most Ingenious Hack I've Ever Seen". Motherboard. Vice. 27 Ocak 2018 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 26 Ocak 2018.
- ^ "DRAM 'Bitflipping' exploit for attacking PCs: Just add JavaScript". Ars Technica. 4 A?ustos 2015. 27 Ocak 2018 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 26 Ocak 2018.
- ^ "Rowhammer security exploit: Why a new security attack is truly terrifying". slate.com. 28 Temmuz 2015. 30 Temmuz 2015 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 29 Temmuz 2015.
- ^ "Benchmark.js". benchmarkjs.com. 19 Aral?k 2016 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 6 Kas?m 2016.
- ^ "JSBEN.CH Performance Benchmarking Playground for JavaScript". jsben.ch. 27 ?ubat 2021 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 13 A?ustos 2021.
- ^ "Popularity". 3 Nisan 2008. 3 Temmuz 2011 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 19 Ocak 2012.
- ^ "JavaScript With Syntax For Types". typescriptlang.org (?ngilizce). 11 A?ustos 2022 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 21 Kas?m 2024.
- ^ "TypeScript: JavaScript With Syntax For Types". Typescriptlang.org. 11 A?ustos 2022 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 12 A?ustos 2022.
- ^ "Edge Browser Switches WebAssembly to 'On' -- Visual Studio Magazine". Visual Studio Magazine. 10 ?ubat 2018 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 9 ?ubat 2018.
- ^ "frequently asked questions". asm.js. 4 Haziran 2014 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 13 Nisan 2014.
D?? ba?lant?lar
[de?i?tir | kayna?? de?i?tir]- Curlie'de JavaScript (DMOZ tabanl?)
- "JavaScript: The First 20 Years". 6 Mart 2022 tarihinde kayna??ndan ar?ivlendi. Eri?im tarihi: 6 ?ubat 2022.