JavaScript (genellikle JS olarak kısaltılır), HTML ve CSS ile birlikte World Wide Web'in temel teknolojilerinden biri olan programlama dilidir.Web sitelerinin %97'sinden fazlası, web sayfası hareketleri için istemci tarafında JavaScript kullanırlar ve kullanılan kodlar genellikle üçüncü taraf kitaplıkları içerir. 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 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 | )
Tasarımcı | Başlangıçta Netscape'ten Brendan Eich; diğerleri de ECMAScript standardına katkıda bulunmuştur. |
Kararlı sürüm | ECMAScript 2023 (Haziran 2023 | ) )
Önizleme sürümü | ECMAScript 2025 (27 Mart 2024 | ) )
, , ördek | |
V8, JavaScriptCore, , Chakra | |
Etkilendikleri | ,,,AWK, |
Etkiledikleri | ActionScript, , CoffeeScript, , Haxe, , Objective-J, , TypeScript |
Olağan dosya uzantıları |
|
Web sitesi | ecma-international.org/publications-and-standards/standards/ecma-262/ |
JavaScript, ECMAScript standardına uyan, genellikle eş zamanlı olarak derlenmiş, bir dildir., 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, ve ilgili 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
Netscape'te Oluşturma
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. Mosaic'in önde gelen geliştiricileri daha sonra 1994'te daha parlak bir geleceği olduğu düşünülen piyasaya süren Netscape şirketini kurdular. Netscape Navigator hızla en çok kullanılan tarayıcı haline geldi.
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.
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. 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.
JavaScript adının seçimi, doğrudan Java ile ilgili olduğu imâ 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ü.
Microsoft tarafından benimsenmesi
Microsoft, 1995 yılında Internet Explorer'ı piyasaya sürerek Netscape ile bir tarayıcı savaşına yol açtı. JavaScript cephesinde, Microsoft, adlı kendi yorumlayıcısını oluşturmak için Navigator yorumlayıcısında tersine mühendislik yaptı.
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ı. 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ı.
JScript'in yükselişi
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ı.
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ı. Bu durum, Web'de 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
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ı.
2005 yılında Mozilla, ECMA International'a katıldı ve (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, uygulamasını 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 , 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, , ve dâhil 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ü. En önemli yenilik tam zamanında derlemeydi (JIT), bu nedenle diğer tarayıcı satıcılarının motorlarını JIT için elden geçirmeleri gerekiyordu.
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ı
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ı.
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 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 ve npm dünyadaki herhangi bir paket yöneticisinden çok daha fazla modüle sahipti.
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. Dildeki olası revizyonlar, kapsamlı bir teklif süreciyle incelenir. Artık, sürüm numaraları yerine geliştiriciler, gelecek özelliklerin durumunu tek tek kontrol etmektedirler.
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ç da oluşturulmuştur.
Ticari Marka
"JavaScript" adı, Oracle Corporation'ın Amerika Birleşik Devletleri'ndeki ticari markasıdır .
Web sitesi istemci tarafı kullanımı
JavaScript, web sitelerinin % 97'sinin bu amaçla kullandığı, Web'in baskın komut dosyası dilidir. Komut dosyaları HTML belgelerine gömülür veya bunlar da dâhil 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
- 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.
- oluşturma.
- Veriler bir web sunucusuna gönderilmeden önce bir giriş değerlerinin .
- Kullanıcının davranışıyla ilgili verilerin günlüğe kaydedilmesi ve ardından bir sunucuya gönderilmesi. Web sitesi sahibi bu verileri , ve için kullanabilir.
- Bir kullanıcıyı başka bir sayfaya yönlendirme.
Kitaplıklar ve çerçeveler
Web sitelerinin %80'inden fazlası, istemci tarafı komut dosyası oluşturma için bir üçüncü taraf JavaScript kitaplığı veya web çerçevesi kullanırlar.
jQuery, web sitelerinin %75'inden fazlası tarafından kullanılan açık ara en popüler kitaplıktır.Facebook, web sitesi için React kitaplığını oluşturdu ve daha sonra bunu açık kaynak olarak yayınladı; Twitter dâhil diğer pek çok site günümüzde bunu kullanmaktadır. Aynı şekilde Google'ın YouTube ve Gmail'i de dâhil 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.
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.
Diğer kullanımları
JavaScript kullanımı, web tarayıcısı köklerinin ötesine geçmiştir. JavaScript motorları artık hem 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, ve Microsoft'un Internet Information Services idi, ancak bunlar küçük özelliklerdi. Sunucu tarafı kullanımı, 2000'lerin sonlarında Node.js ve oluşturulmasıyla birlikte büyümeye başladı.
, Cordova, ve diğer , 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 ve JavaScript ile yazılmış GNOME Shell uzantılarını içerir.
JavaScript, son zamanlarda bazı gömülü sistemlerde, genellikle Node.js'den yararlanılarak görünmeye başladı.
Özellikler
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ış
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 : başlangıçta JavaScript yalnızca var
ile sahipti; daha sonra ECMAScript 2015'te let
ve anahtar sözcükleriyle blok kapsamı eklendi. C gibi, JavaScript de ve arasında bir ayrım yapar. C'den bir sözdizimsel farkı da, noktalı virgüllerin (deyimleri sonlandıran) atlanmasına izin veren eklemedir.
Zayıf yazılmış
JavaScript , bu kullanılan işleme bağlı olarak belirli türlerin dolaylı olarak yayınlandığı anlamına gelir.
- İ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:
- 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. Ö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.
Dinamik
- Yazım
- JavaScript, diğer çoğu betik dili gibi . Bir , bir ifade yerine bir ilişkilendirilir. Örneğin, başlangıçta bir sayıya bağlı olan bir değişken, bir dizgeye yeniden atanabilir. JavaScript, ördek yazımı dâhil, objelerin türünü test etmenin çeşitli yollarını destekler.
- Çalışma zamanı değerlendirmesi
- JavaScript, çalışma zamanında dizeler olarak sağlanan ifadeler
bir değerlendirme işlevi içerir.
Nesne (Obje) yönelimi (prototip tabanlı)
JavaScript'teki prototip kalıtım, tarafından şu şekilde tanımlanır: EKSİK ALAN JavaScript'te bir obje, bir prototiple büyütülmüş bir (aşağıya bakın); her anahtar bir objenin 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 (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. JavaScript'te prototiplerle birçok sınıf tabanlı özelliği simüle etmek mümkündür.
- 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 dâhil) devralan bir prototip örneği oluşturur. 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).prototype
özelliği, yeni objenin dâhili 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. - Metod olarak fonksiyonlar
- Birçok nesne yönelimli dilden farklı olarak, işlev tanımı ile 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
Bir fonksiyon birinci sınıftır ; bir fonksiyon bir obje olarak kabul edilir. Bu nedenle, bir fonksiyonun .call()
ve .bind()
gibi özellikleri ve metotları olabilir.İç 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 oluşturur: dış işlevin (herhangi bir sabit, yerel değişken veya bağımsız değişken değeri dâhil), dış işlevin yürütülmesi sona erdikten sonra bile, her bir iç fonksiyon objesinin iç durumunun bir parçası haline gelir. . JavaScript ayrıca de destekler.
Yetkilendirme
JavaScript, örtük ve açık destekler.
- Rol olarak fonksiyonlar [Özellikler (Traits) ve Karışımlar (Mixins)]
- JavaScript, ve gibi 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 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
JS 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 birer birer işler. JavaScript, her yeni mesajla ilişkili bir fonksiyonu çağırır ve fonksiyonun ve bir (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 (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ü olarak tanımlar: program (girişi/çıkışı), ve (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.
- Değişken (Varyadik) fonksiyonlar
- Bir fonksiyona sınırsız sayıda parametre iletilebilir. Fonksiyon bunlara aracılığıyla ve ayrıca yerel
arguments
objesi aracılığıyla erişebilir.bind
yöntemi kullanılarak oluşturulabilir.
- Dizi ve obje değişmezleri (literal)
- Birçok komut dosyası dili gibi, diziler ve objeler (diğer dillerdeki ) kısa bir kısayol sözdizimi ile oluşturulabilir. Aslında, bu 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.
- Sözler (Promise) ve zaman uyumsuz/bekleme (Async/await)
- JavaScript, zaman uyumsuz işlemleri işlemek için ve 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
Tarihsel olarak, bazı JavaScript motorları bu standart olmayan özellikleri destekledi:
- koşullu
catch
cümleleri (Java gibi) - (array comprehensions) ve üreteç ifadeleri (Python gibi)
- kısa fonksiyon ifadeleri (
function(args) expr
; bu deneysel sözdizimi ok işlevlerinden önce gelir) - (E4X), ECMAScript'e yerel XML desteği ekleyen bir uzantı (sürüm 21 den beri Firefox'ta desteklenmemektedir)
Sözdizimi
Basit örnekler
JavaScript'teki değişkenler, var
,let
veya const
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:
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 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
(veya lambda):
let isimsizFonksiyon = () => console.log("İsimsiz bir fonksiyon"); isimsizFonksiyon(); // "İsimsiz bir fonksiyon" yazısını konsola getirir.
Bu örnek, JavaScript'te 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 olarak bilinirler.
Obje örneği:
let kullanici = { adi: "Ahmet", yasi: 41, selamVer() { // "this" burada "mevcut obje" dir alert(this.adi); } }; kullanici.selamVer(); // Ahmet
gösterimi (arguments
özel bir değişkendir):
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
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
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 dâhil 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
/* İ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
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. Closure Toolkit, üçüncü taraf JavaScript ve HTML'nin güvenli bir şekilde yerleştirilmesi ve yalıtılması için başka bir projedir.
, 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ı
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.
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 ve GET parametrelerinde bir kimlik doğrulama belirteci eklemek.
Müşteriye duyulan yanlış güven
İ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 , 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.
- Bir saldırgan tarafından ayıklanabileceğinden, şifreler gibi hassas bilgileri JavaScript'e gömmek çok kötü bir uygulama olarak kabul edilir.
Geliştiricilere duyulan yanlış güven
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. "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." 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.
Tarayıcı ve eklenti kodlama hataları
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, 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.Google Chrome benzer şekilde sayfa oluşturucularını kendi " sandbox "larıyla sınırlar.
Korumalı alan uygulama hataları
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.
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: ). Bu, JavaScript'i ( VBScript gibi) bir Truva atı için teorik olarak uygun bir vektör yapar, ancak JavaScript Truva atları pratikte nadirdir.
Donanım açıkları
2015 yılında, güvenlik araştırmacıları tarafından bir makalede, bir saldırısının JavaScript tabanlı bir kavram kanıtı uygulaması açıklanmıştır.
2017 yılında, tarayıcı üzerinden JavaScript tabanlı bir saldırının 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ı
Önemli araçlar dil ile birlikte gelişmiştir.
- Her büyük web tarayıcısında, JavaScript hata ayıklayıcı dâhil olmak üzere yerleşik web geliştirme araçları bulunur.
- ve gibi araçları, bir dizi standart ve yönergeye uygunluk için JavaScript kodunu tarar.
- Bazı tarayıcılarda yerleşik . Benchmark.js ve jsbench gibi bağımsız profil oluşturma kitaplıkları da oluşturulmuştur.
- Birçok metin düzenleyici (IDE), JavaScript kodu için sözdizimi vurgulama desteğine sahiptir.
İlgili teknolojiler
Java
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.
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 vardır, JavaScript'in yazımı ise . Java, derlenmiş bayt kodundan yüklenirken JavaScript, insan tarafından okunabilir kaynak kodu olarak yüklenir. Java'nın objeleri , 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
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
TypeScript (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.
WebAssembly
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. WebAssembly kodu, normal JavaScript koduyla aynı sanal alanda çalışır.
, WebAssembly'nin öncüsü olarak hizmet veren bir JavaScript alt kümesidir.
Aktarıcılar (Transpilers)
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 oluşturulmuştur.
Kaynakça
- ^ , "Netscape and Sun announce JavaScript", PR Newswire, December 4, 1995
- ^ "ECMAScript® 2023 Language Specification". Haziran 2023. Erişim tarihi: 2 Mart 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 . 24 Aralık 2020 tarihinde kaynağından . Erişim tarihi: 25 Aralık 2018.
Eich: The immediate concern at Netscape was it must look like Java.
- ^ a b c d e . 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 . Erişim tarihi: 18 Mart 2022.
- ^ "Brendan Eich: An Introduction to JavaScript, JSConf 2010". YouTube. s. 22m. 29 Ağustos 2020 tarihinde kaynağından . Erişim tarihi: 25 Kasım 2019.
Eich: "function", eight letters, I was influenced by AWK.
- ^ Eich, Brendan (1998). "Foreword". (Ed.). JavaScript Bible (3. bas.). . ISBN . LCCN 97078208. OCLC 38888873. OL 712205M.
- ^ "nodejs/node-eps". GitHub. 29 Ağustos 2020 tarihinde kaynağından . Erişim tarihi: 5 Temmuz 2018.
- ^ . 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 . OCLC 686709345. 14 Şubat 2022 tarihinde kaynağından . 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 . w3techs.com. 13 Ağustos 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2021.
- ^ a b c d . w3techs.com. 23 Eylül 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2021.
- ^ . 8 Mayıs 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Mayıs 2020.
- ^ . Bloomberg. 17 Mart 2011. 16 Mayıs 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 7 Aralık 2011.
- ^ . 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 . Erişim tarihi: 31 Ağustos 2018.
- ^ . 8 Şubat 2008 tarihinde kaynağından arşivlendi.
- ^ , 17 Haziran 2016, 10 Şubat 2019 tarihinde kaynağından arşivlendi, erişim tarihi: 7 Şubat 2018
- ^ a b . speakingjs.com. 1 Kasım 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 1 Kasım 2021.
- ^ a b . oreilly.com. 6 Nisan 2001. 19 Temmuz 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 16 Temmuz 2016.
- ^ . microsoft.com. Microsoft. 29 Mayıs 1996. 24 Kasım 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 16 Temmuz 2016.
- ^ . 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). . . 7 Mayıs 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Mayıs 2021.
- ^ Weber (9 Mayıs 2005). . 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. 11 Haziran 2009. 14 Nisan 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Mayıs 2021.
- ^ . 4 Aralık 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Temmuz 2020.
- ^ . Wired. 22 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 18 Ocak 2019.
- ^ . es6-features.org. 18 Mart 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Mart 2018.
- ^ . TheServerSide. 19 Temmuz 2018. 2 Ağustos 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 2 Ağustos 2021.
- ^ . Linux.com. 13 Ocak 2017. 2 Ağustos 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 2 Ağustos 2021.
- ^ a b . The New Stack. 4 Mayıs 2016. 16 Ocak 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Ocak 2021.
- ^ . tc39.es. Ecma International. 7 Şubat 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Ocak 2021.
- ^ . TC39. 4 Aralık 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Ocak 2021.
- ^ a b . GitHub. 31 Ocak 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 6 Şubat 2020.
- ^ . . 13 Temmuz 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Mayıs 2021.
- ^ . Oracle Corporation. 5 Haziran 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Mayıs 2021.
- ^ . vanilla-js.com. 16 Haziran 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Haziran 2020.
- ^ . Oracle Corporation. 11 Aralık 1998. 11 Mart 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Mayıs 2021.
- ^ . 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 . readwrite.com. 17 Aralık 2009. 17 Haziran 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 16 Temmuz 2016.
- ^ . 7 Ağustos 2009 tarihinde kaynağından arşivlendi. Erişim tarihi: 18 Ağustos 2009.
- ^ . 11 Şubat 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 7 Şubat 2013.
- ^ . 26 Mayıs 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Mayıs 2021.
- ^ . 13 Ağustos 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Mayıs 2020.
- ^ . 1 Mayıs 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Mayıs 2020.
- ^ . "O'Reilly Media, Inc.". 17 Ağustos 2006. s. 16. ISBN . 1 Ağustos 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Mart 2019.
- ^ a b c d . The DEV Community (İngilizce). 28 Ekim 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 28 Ekim 2019.
- ^ . www.destroyallsoftware.com. 28 Ekim 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 28 Ekim 2019.
- ^ . Developer.mozilla.org. 16 Şubat 2017. 14 Mart 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2017.
- ^ a b Flanagan 2006.
- ^ . 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 .
- ^ Eloquent JavaScript. No Starch Press. 2011. ss. 95-97. ISBN .
- ^ . 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 .
- ^ "Function – JavaScript". MDN Web Docs (İngilizce). 30 Ekim 2021 tarihinde kaynağından . Erişim tarihi: 30 Ekim 2021.
- ^ . Es5.github.com. 28 Ocak 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Mayıs 2013.
- ^ . Cocktailjs.github.io. 4 Şubat 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2017.
- ^ . 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 .
- ^ . Mozilla Developer Network. Mozilla Foundation. 14 Şubat 2014. 24 Temmuz 2014 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Temmuz 2014.
- ^ . The . 23 Aralık 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Aralık 2012.
- ^ . MDN web docs. Mozilla. 28 Mayıs 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 27 Haziran 2018.
- ^ . MDN web docs. Mozilla. 28 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 27 Haziran 2018.
- ^ . . 26 Kasım 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Aralık 2012.
- ^ . Mozilla Developer Network. Mozilla. 28 Şubat 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 6 Nisan 2013.
- ^ . Mozilla Developer Network. Mozilla. 13 Nisan 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 6 Nisan 2013.
- ^ . Learnersbucket.com. 23 Nisan 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Nisan 2019.
- ^ . ADsafe. 6 Temmuz 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Mayıs 2021.
- ^ . 15 Mayıs 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Mayıs 2013.
- ^ . 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.
- ^ . 17 Haziran 2008. ISSN 1797-1993. 9 Ağustos 2011 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Haziran 2008.
- ^ . ServiceObjects Blog. ServiceObjects. 3 Haziran 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Haziran 2019.
- ^ a b (PDF). Proceedings 2017 Network and Distributed System Security Symposium. 21 Aralık 2016. doi:10.14722/ndss.2017.23414. ISBN . 29 Mart 2017 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 22 Şubat 2017.
- ^ Collins (27 Mart 2016). . Quartz. 22 Şubat 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Şubat 2017.
- ^ . CNET. 19 Ağustos 1998. 25 Aralık 2002 tarihinde kaynağından arşivlendi.
- ^ . 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 . 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 .
- ^ Jean-Pharuns (30 Temmuz 2015). . Motherboard. Vice. 27 Ocak 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Ocak 2018.
- ^ . Ars Technica. 4 Ağustos 2015. 27 Ocak 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Ocak 2018.
- ^ . slate.com. 28 Temmuz 2015. 30 Temmuz 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Temmuz 2015.
- ^ . benchmarkjs.com. 19 Aralık 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 6 Kasım 2016.
- ^ . jsben.ch. 27 Şubat 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Ağustos 2021.
- ^ . 3 Nisan 2008. 3 Temmuz 2011 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Ocak 2012.
- ^ "TypeScript: JavaScript With Syntax For Types". Typescriptlang.org. 11 Ağustos 2022 tarihinde kaynağından . Erişim tarihi: 12 Ağustos 2022.
- ^ . Visual Studio Magazine. 10 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Şubat 2018.
- ^ . asm.js. 4 Haziran 2014 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Nisan 2014.
Dış bağlantılar
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
JavaScript genellikle JS olarak kisaltilir HTML ve CSS ile birlikte World Wide Web in temel teknolojilerinden biri olan programlama dilidir Web sitelerinin 97 sinden fazlasi web sayfasi hareketleri icin istemci tarafinda JavaScript kullanirlar ve kullanilan kodlar genellikle ucuncu taraf kitapliklari icerir Tum buyuk web tarayicilarinda kaynak kodunu kullanicilarin cihazlarinda yurutebilmek icin ozel bir JavaScript motoru bulunur JavaScriptJavaScript Logosu JavaScript kaynak kodu ekran goruntusuParadigmasiCoklu paradigma Olaya dayali programlama Fonksiyonel programlama Zorunlu programlama Nesne yonelimli programlamaIlk cikisi4 Aralik 1995 28 yil once 1995 12 04 TasarimciBaslangicta Netscape ten Brendan Eich digerleri de ECMAScript standardina katkida bulunmustur Kararli surumECMAScript 2023 Haziran 2023 12 ay once Haziran 2023 Onizleme surumuECMAScript 2025 27 Mart 2024 2 ay once 27 Mart 2024 ordekV8 JavaScriptCore ChakraEtkilendikleri AWK EtkiledikleriActionScript CoffeeScript Haxe Objective J TypeScriptOlagan dosya uzantilari js cjs mjsWeb sitesiecma international org publications and standards standards ecma 262 JavaScript ECMAScript standardina uyan genellikle es zamanli olarak derlenmis bir dildir prototip tabanli obje yonelimi ve birinci sinif islevlere sahiptir Olay odakli islevsel ve zorunlu programlama stillerini destekleyen coklu paradigmadir Metin tarihler duzenli ifadeler standart veri yapilari ve Belge Obje Modeli DOM ile calismak icin uygulama programlama arayuzlerine API ler sahiptir ECMAScript standardi ag olusturma depolama veya grafik olanaklari gibi herhangi bir giris cikis I O icermez Pratikte web tarayicisi veya diger calistirma ortamlari I O icin JavaScript API leri saglarlar JavaScript motorlari baslangicta yalnizca web tarayicilarinda kullaniliyordu ancak gunumuzde bazi sunucularin ve cesitli uygulamalarin da temel bilesenleridir Bu kullanim icin en yaygin calisma zamani sistemi Node js dir Java ve JavaScript in ad ve ilgili acisindan benzerlikleri olsa da iki dil birbirinden farklidir ve tasarim acisindan da buyuk farkliliklar gosterir TarihceNetscape te Olusturma Grafik kullanici arayuzune sahip ilk web tarayicisi Mosaic 1993 yilinda piyasaya suruldu Teknik bilgisi olmayan kisilerin erisebildigi yeni ortaya cikan World Wide Web in hizli buyumesinde onemli bir rol oynamistir Mosaic in onde gelen gelistiricileri daha sonra 1994 te daha parlak bir gelecegi oldugu dusunulen piyasaya suren Netscape sirketini kurdular Netscape Navigator hizla en cok kullanilan tarayici haline geldi Web in yeni sekillenmeye basladigi bu yillarda web sayfalari yalnizca statik olabilirdi ve sayfa tarayiciya yuklendikten sonra dinamik davranis yeteneginden de yoksundu Gelisen web gelistirme sahnesinde programlamacilarin bu sinirlamanin kaldirilmasina yonelik istekleri vardi bu nedenle 1995 te Netscape Navigator a bir komut dosyasi dili eklemeye karar verdi Bunu basarmak icin iki yol izlediler Java programlama dilini yerlestirmek icin Sun Microsystems ile is birligi yaparken ayni zamanda Scheme dilini yerlestirmek icin de Brendan Eich i ise aldilar Netscape yonetimi kisa sure sonra Eich icin en iyi secenegin Java ya benzer ve daha az Scheme veya diger mevcut komut dosyasi dillerine benzeyen yeni bir dil tasarlamak olduguna karar verdi Eylul 1995 te Navigator beta nin bir parcasi olarak ilk sunuldugunda eklenen yeni dil ve yorumlayici uygulamasi LiveScript olarak adlandirilsa da Aralik ayinda resmi surum icin adi JavaScript olarak degistirildi JavaScript adinin secimi dogrudan Java ile ilgili oldugu ima edilerek kafa karisikligina neden oldu O zamanlar dot com balonu patlamisti ve Java henuz yeni bir programlama dili idi bu nedenle Eich JavaScript adini Netscape in bir pazarlama taktigi olarak gordu Microsoft tarafindan benimsenmesi Microsoft 1995 yilinda Internet Explorer i piyasaya surerek Netscape ile bir tarayici savasina yol acti JavaScript cephesinde Microsoft adli kendi yorumlayicisini olusturmak icin Navigator yorumlayicisinda tersine muhendislik yapti JScript ilk olarak 1996 da CSS icin ilk ve HTML uzantilari ile birlikte piyasaya suruldu Bu uygulamalarin her biri Navigator daki benzerlerinden belirgin sekilde farkliydi Bu farkliliklar gelistiricilerin web sitelerinin her iki tarayicida da saglikli sekilde calismasini zorlastirdi ve birkac yil boyunca En iyi Netscape te goruntulenir ve En iyi Internet Explorer da goruntulenir seklinde logolarin yaygin olarak kullanilmasina yol acti JScript in yukselisi Kasim 1996 da Netscape JavaScript i Ecma International a tum tarayici saticilarinin uyabilecegi standart bir belirtimin baslangic noktasi olarak sundu Bu Haziran 1997 de ilk ECMAScript dil spesifikasyonunun resmi olarak yayinlanmasina yol acti Standartlar sureci ECMAScript 2 nin Haziran 1998 de ve ECMAScript 3 un Aralik 1999 da piyasaya surulmesiyle birkac yil boyunca devam etti ECMAScript 4 uzerindeki calismalar ise 2000 yilinda basladi Bu arada Microsoft tarayici pazarinda giderek daha baskin bir konuma geldi 2000 lerin basinda Internet Explorer in pazar payi 95 e ulasti Bu durum Web de icin gercek bir standart haline geldigi anlamini tasiyordu Microsoft baslangicta standartlar surecine katildi ve bazi onerileri kendi JScript dilinde uyguladi ancak sonunda Ecma calismasi uzerinde is birligini durdurdu Boylece ECMAScript 4 yenilmis oldu Buyume ve standardizasyon 2000 lerin basinda Internet Explorer in hakimiyeti doneminde istemci tarafi komut dosyasi olusturma yontemi oldukca durgundu Bu Netscape in halefi Mozilla nin Firefox tarayicisini piyasaya surdugu 2004 yilinda degismeye basladi Firefox bircok kisi tarafindan iyi bir sekilde karsilandi ve Internet Explorer dan onemli bir pazar payini kendisine aldi 2005 yilinda Mozilla ECMA International a katildi ve E4X standardi uzerinde calismaya basladi Bu Mozilla nin bir ECMAScript 4 taslagina dayanan ActionScript 3 dilinde E4X i uygulayan Macromedia daha sonra Adobe Systems tarafindan satin alindi ile ortak olarak calismasina yol acti Hedef ActionScript 3 u yeni ECMAScript 4 olarak standart hale getirmekti Bu amacla Adobe Systems uygulamasini bir proje olarak yayinladi Ancak Tamarin ve ActionScript 3 yerlesik istemci tarafi komut dosyasi olusturmaktan cok farkliydi ve Microsoft un is birligi olmadan ECMAScript 4 hicbir zaman istenen sonuclari vermedi Bu arada ECMA calismasina bagli olmayan acik kaynak topluluklarinda cok onemli gelismeler yasaniyordu 2005 te Ajax terimini turettigi ve verilerin arka planda yuklenebilecegi web uygulamalari olusturmak icin JavaScript in omurgasi oldugu bir dizi teknolojiyi tanimladigi ve tam sayfa gereksinimini ortadan kaldirdigi bir WhiteBook yayinladi Bu acik kaynak kitapliklarin ve onlarin etrafinda olusan topluluklarin onculuk ettigi bir JavaScript ronesans donemini atesledi jQuery ve dahil olmak uzere bircok yeni kitaplik olusturuldu Google Chrome tarayicisini 2008 de rakiplerinden daha hizli olan V8 JavaScript motoruyla piyasaya surdu En onemli yenilik tam zamaninda derlemeydi JIT bu nedenle diger tarayici saticilarinin motorlarini JIT icin elden gecirmeleri gerekiyordu Temmuz 2008 de bu farkli taraflar Oslo da bir konferans icin bir araya geldi Bu birlesme konuyla ilgili tum calismalari birlestirmek ve dili ileriye tasimak icin 2009 baslarinda nihai anlasmaya yol acti Sonucu ise Aralik 2009 da yayinlanan ECMAScript 5 standardiydi Olgunluga ulasmasi Dil uzerinde iddiali calismalar birkac yil boyunca devam etti ve 2015 yilinda ECMAScript 6 nin yayinlanmasiyla resmilestirilen kapsamli bir ekleme ve iyilestirme derlemesiyle sonuclandi Node js nin 2009 yilinda Ryan Dahl tarafindan olusturulmasi JavaScript in web tarayicilari disinda kullaniminda onemli bir artisa yol acti Node V8 motorunu bir ve I O API lerini birlestirerek bagimsiz bir JavaScript calisma zamani sistemi saglamaktaydi 2018 itibariyla Node milyonlarca gelistirici tarafindan kullaniliyordu ve npm dunyadaki herhangi bir paket yoneticisinden cok daha fazla module sahipti ECMAScript taslak belirtimi su anda GitHub da herkese acik bir sekilde korunmaktadir ve surumler duzenli sekilde yillik anlik goruntuler araciligiyla uretilmektedir Dildeki olasi revizyonlar kapsamli bir teklif sureciyle incelenir Artik surum numaralari yerine gelistiriciler gelecek ozelliklerin durumunu tek tek kontrol etmektedirler Mevcut JavaScript ekosisteminde bulunan bircok kitaplik ve cercevenin bazilari yerlesik programlama uygulamalari ve web tarayicilarinin disinda JavaScript in farkli kullanim alanlari icin olusturulmustur Ayrica tek sayfalik uygulamalarin ve diger JavaScript agirlikli web sitelerinin artmasiyla birlikte gelistirme surecine yardimci olmak icin birkac da olusturulmustur Ticari Marka JavaScript adi Oracle Corporation in Amerika Birlesik Devletleri ndeki ticari markasidir Web sitesi istemci tarafi kullanimiJavaScript web sitelerinin 97 sinin bu amacla kullandigi Web in baskin komut dosyasi dilidir Komut dosyalari HTML belgelerine gomulur veya bunlar da dahil edilmis olur Boylelikle kodlar DOM ile etkilesime girer Tum buyuk web tarayicilarinda kodu kullanicinin cihazinda yuruten yerlesik bir JavaScript motoru bulunur Komut dosyasiyla yazilmis davranis ornekleri Ajax veya WebSocket araciligiyla sayfayi yeniden yuklemeden yeni web sayfasi icerigi yukleme Ornegin sosyal medya kullanicilari mevcut sayfadan ayrilmadan mesaj gonderip alabilir Nesneleri soldurma yeniden boyutlandirma ve tasima gibi web sayfasi animasyonlari Tarayici oyunlari oynama Akis ortaminin oynatilmasini kontrol etme olusturma Veriler bir web sunucusuna gonderilmeden once bir giris degerlerinin Kullanicinin davranisiyla ilgili verilerin gunluge kaydedilmesi ve ardindan bir sunucuya gonderilmesi Web sitesi sahibi bu verileri ve icin kullanabilir Bir kullaniciyi baska bir sayfaya yonlendirme Kitapliklar ve cerceveler Web sitelerinin 80 inden fazlasi istemci tarafi komut dosyasi olusturma icin bir ucuncu taraf JavaScript kitapligi veya web cercevesi kullanirlar jQuery web sitelerinin 75 inden fazlasi tarafindan kullanilan acik ara en populer kitapliktir Facebook web sitesi icin React kitapligini olusturdu ve daha sonra bunu acik kaynak olarak yayinladi Twitter dahil diger pek cok site gunumuzde bunu kullanmaktadir Ayni sekilde Google in YouTube ve Gmail i de dahil olmak uzere web siteleri icin olusturdugu Angular cercevesi artik baskalari tarafindan kullanilabilen acik kaynakli bir projedir Buna karsilik Vanilla JS terimi herhangi bir kitaplik veya cerceve kullanmayan bunun yerine tamamen standart JavaScript islevselligine dayanan web siteleri icin olusturulmustur Diger kullanimlariJavaScript kullanimi web tarayicisi koklerinin otesine gecmistir JavaScript motorlari artik hem web sitesi dagitimlari hem de tarayici disi uygulamalar icin cesitli diger yazilim sistemlerine yerlestirilmistir Sunucu tarafi JavaScript kullanimini tesvik etmeye yonelik ilk girisimler ve Microsoft un Internet Information Services idi ancak bunlar kucuk ozelliklerdi Sunucu tarafi kullanimi 2000 lerin sonlarinda Node js ve olusturulmasiyla birlikte buyumeye basladi Cordova ve diger JavaScript te uygulanan davranisla bircok uygulama olusturmak icin kullanilmistir Tarayici olmayan diger uygulamalar PDF belgelerini komut dosyasi yazmak icin Adobe Acrobat destegi ve JavaScript ile yazilmis GNOME Shell uzantilarini icerir JavaScript son zamanlarda bazi gomulu sistemlerde genellikle Node js den yararlanilarak gorunmeye basladi OzelliklerAsagidaki ozellikler aksi acikca belirtilmedigi surece uyumlu tum ECMAScript uygulamalari icin ortaktir Zorunlu ve yapilandirilmis JavaScript C nin yapilandirilmis programlama sozdiziminin cogunu destekler ornegin if ifadeleri while donguleri switch ifadeleri do while donguleri vb Kismi bir istisna baslangicta JavaScript yalnizca var ile sahipti daha sonra ECMAScript 2015 te let ve anahtar sozcukleriyle blok kapsami eklendi C gibi JavaScript de ve arasinda bir ayrim yapar C den bir sozdizimsel farki da noktali virgullerin deyimleri sonlandiran atlanmasina izin veren eklemedir Zayif yazilmis JavaScript bu kullanilan isleme bagli olarak belirli turlerin dolayli olarak yayinlandigi anlamina gelir Ikili operatoru her iki islenen de sayi olmadigi surece her iki isleneni de bir dizeye atar Bunun nedeni toplama operatorunun bir birlestirme operatoru olarak da kullanilmasindan dolayidir Ikili isleci her zaman her iki isleneni de bir sayiya atar Her iki birli operator isleneni her zaman bir sayiya cevirir Degerler asagidaki gibi dizgelere donusturulur Dizeler oldugu gibi birakilir Sayilar dize temsillerine donusturulur Dizilerin ogeleri dizelere donusturulur ve ardindan virgul ile birlestirilirler Diger objeler object Object dizesine donusturulur burada Object objenin yapicisinin adidir Degerler dizelere donusturulerek ve ardindan dizeler de sayilara donusturulerek sayilara donusturulur Bu surecler sirasiyla dize ve sayi dokumu icin prototip uzerinde toString ve valueOf islevleri tanimlanarak degistirilebilir JavaScript kurallarin karmasikligi tutarsizlikla karistirilabileceginden bu donusumleri uygulama sekli nedeniyle elestiriler almistir Ornegin bir dizeye sayi eklerken sayi birlestirme yapilmadan once bir dizeye donusturulur ancak bir dizeden bir sayi cikarilirken cikarma islemi yapilmadan once dize bir sayiya donusturulur JavaScript turu donusumleri Sol Isleyici Operator Sag Isleyici Sonuc bos dizi array bos dizi array bos string dize bos dizi array bos obje nesne object Object dize string false boole dogru yanlis bos dizi array false dize string 123 dize string 1 sayi number 1231 dize string 123 dize string 1 sayi number 122 sayi number 123 dize string abc dize string a href wiki Say C4 B1 de C4 9Fil title Sayi degil NaN a sayi number Genellikle ile sonuclanan 0 sayi da belirtilir Bu yanilticidir bos bir obje yerine bos bir kod blogu olarak yorumlanir ve bos dizi kalan unary tekli operatoru tarafindan bir sayiya donusturulur Ifadeyi parantez icine alirsaniz kume parantezleri bos bir obje olarak yorumlanir ve ifadenin sonucu beklendigi gibi object Object olur Dinamik Yazim JavaScript diger cogu betik dili gibi Bir bir ifade yerine bir iliskilendirilir Ornegin baslangicta bir sayiya bagli olan bir degisken bir dizgeye yeniden atanabilir JavaScript ordek yazimi dahil objelerin turunu test etmenin cesitli yollarini destekler Calisma zamani degerlendirmesi JavaScript calisma zamaninda dizeler olarak saglanan ifadeler bir degerlendirme islevi icerir Nesne Obje yonelimi prototip tabanli JavaScript teki prototip kalitim tarafindan su sekilde tanimlanir EKSIK ALAN JavaScript te bir obje bir prototiple buyutulmus bir asagiya bakin her anahtar bir objenin icin ad saglar ve boyle bir adi belirtmenin iki sozdizimsel yolu vardir nokta notasyonu obj x 10 ve parantez gosterimi obj x 10 Bir ozellik calisma zamaninda eklenebilir geri tepebilir veya silinebilir Bir objenin cogu ve bir objenin prototip miras zincirine ait olan herhangi bir ozellik bir for in dongusu kullanilarak numaralandirilabilir Prototipler JavaScript diger bircok nesne yonelimli dilin kalitim icin siniflari kullandigi prototipleri kullanir JavaScript te prototiplerle bircok sinif tabanli ozelligi simule etmek mumkundur Obje olusturucu olarak fonksiyonlar Fonksiyonlar tipik rolleriyle birlikte obje olusturucular olarak ikiye ayrilir Bir fonksiyon cagrisina new ile onek eklemek yapicidan ozellikleri ve yontemleri Object prototipinden ozellikler dahil devralan bir prototip ornegi olusturur ECMAScript 5 Object prototipinden otomatik olarak miras alinmadan bir ornegin acik bir sekilde olusturulmasina izin veren Object create yontemini sunar eski ortamlar prototipi null ogesine atayabilir prototype ozelligi yeni objenin dahili prototipi icin kullanilan objeyi belirler Yapici olarak kullanilan fonksiyonun prototipi degistirilerek yeni yontemler eklenebilir JavaScript in Array veya Object gibi yerlesik olusturuculari da degistirilebilen prototiplere sahiptir Object prototipini degistirmek mumkun olsa da JavaScript teki cogu obje Object prototipinden yontemleri ve ozellikleri devralacagindan ve prototipin degistirilmesini beklemeyebileceginden genellikle kotu uygulama olarak kabul edilirler Metod olarak fonksiyonlar Bircok nesne yonelimli dilden farkli olarak islev tanimi ile tanimi arasinda bir ayrim yoktur Bunun yerine fonksiyon cagrisi sirasinda ayrim olusur Bir fonksiyon bir objenin metodu olarak cagrildiginda fonksiyonun yerel this anahtar sozcugu o cagri icin o objeye baglanir Fonksiyonel Bir fonksiyon birinci siniftir bir fonksiyon bir obje olarak kabul edilir Bu nedenle bir fonksiyonun call ve bind gibi ozellikleri ve metotlari olabilir Ic ice fonksiyon baska bir fonksiyon icinde tanimlanan bir fonksiyondur Dis fonksiyon her cagrildiginda olusturulur Ek olarak ic ice gecmis her islev olusturur dis islevin herhangi bir sabit yerel degisken veya bagimsiz degisken degeri dahil dis islevin yurutulmesi sona erdikten sonra bile her bir ic fonksiyon objesinin ic durumunun bir parcasi haline gelir JavaScript ayrica de destekler Yetkilendirme JavaScript ortuk ve acik destekler Rol olarak fonksiyonlar Ozellikler Traits ve Karisimlar Mixins JavaScript ve gibi modellerinin cesitli fonksiyon tabanli uygulamalarini da yerel olarak destekler Boyle bir fonksiyon function govdesi icinde this anahtar sozcugune bagli en az bir yontemle ek davranisi tanimlar Daha sonra bir Rol call yoluyla acikca devredilmeli veya prototip zinciri araciligiyla paylasilmayan ek davranislara sahip olmasi gereken objelere apply uygulama edilmelidir Obje kompozisyonu ve kalitim Acik fonksiyon tabanli yetkilendirme JavaScript te kapsarken ortuk yetkilendirme ornegin bir objeyle ilgili olabilecek ancak dogrudan bir objeye ait olmayan bir metot bulmak icin prototip zinciri her yurudugunde zaten gerceklesir Metot bulundugunda bu objenin baglaminda cagrilir Bu nedenle JavaScript teki kalitim yapici fonksiyonlarin prototip ozelligine bagli bir yetkilendirme otomatizmi tarafindan kapsanir Cesitli JS bir dildir Calisma zamani ortami JavaScript komut dosyalarinin ortamla etkilesime girebilecegi objeler ve metotlar ornegin bir web sayfasi DOM u saglamak icin tipik olarak bir calisma zamani ortamina ornegin bir web tarayicisi dayanir Bu ortamlar tek is parcaciklidir JavaScript ayrica komut dosyalarini ornegin HTML lt script gt ogeleri dahil etme ice aktarma yetenegi saglamak icin calisma zamani ortamina da guvenir Bu basli basina bir dil ozelligi degildir ancak cogu JavaScript uygulamasinda yaygindir JavaScript bir kuyruktan gelen birer birer isler JavaScript her yeni mesajla iliskili bir fonksiyonu cagirir ve fonksiyonun ve bir call stack cercevesi olusturur Cagri yigini fonksiyonun ihtiyaclarina gore kuculur veya buyur Fonksiyon tamamlandiktan sonra cagri yigini bos oldugunda JavaScript siradaki bir sonraki mesaja ilerler Buna event loop denir ve tamamlanmak icin calistir olarak tanimlanir cunku her mesaj bir sonraki mesaj dikkate alinmadan once tamamen islenir Ancak dilin eszamanlilik modeli olay dongusunu olarak tanimlar program girisi cikisi ve callback fonksiyon kullanilarak gerceklestirilir Bu JavaScript in bir veritabani sorgusunun bilgi dondurmesini beklerken bir fare tiklamasini isleyebilecegi anlamina gelir Degisken Varyadik fonksiyonlar Bir fonksiyona sinirsiz sayida parametre iletilebilir Fonksiyon bunlara araciligiyla ve ayrica yerel arguments objesi araciligiyla erisebilir a rel nofollow class external text href https developer mozilla org en US docs Web JavaScript Reference Global Objects Function bind bind a yontemi kullanilarak olusturulabilir Dizi ve obje degismezleri literal Bircok komut dosyasi dili gibi diziler ve objeler diger dillerdeki kisa bir kisayol sozdizimi ile olusturulabilir Aslinda bu JSON veri formatinin temelini olusturur Duzenli ifadeler Regular expressions JavaScript ayrica yerlesik dize islevlerinden daha karmasik olan metin isleme icin ozlu ve guclu bir sozdizimi saglayan Perl e benzer sekilde duzenli ifadeleri de destekler Sozler Promise ve zaman uyumsuz bekleme Async await JavaScript zaman uyumsuz islemleri islemek icin ve destekler Yerlesik bir Promise objesi vaatleri islemek ve isleyicileri eszamansiz bir eylemin nihai sonucuyla iliskilendirmek icin islevsellik saglar Son zamanlarda gelistiricilerin birden cok JavaScript promise ini birlestirmesine ve farkli senaryolara dayali islemler yapmasina olanak taniyan JavaScript belirtiminde birlestirici yontemler tanitildi Tanitilan yontemler sunlardir Promise race Promise all Promise allSettled ve Promise any Zaman uyumsuz bekleme eszamansiz engellemesiz bir islevin siradan bir eszamanli isleve benzer bir sekilde yapilandirilmasina izin verir Asenkron bloke edici olmayan kod minimum ek yuk ile geleneksel senkronize bloke edici koda benzer sekilde yapilandirilabilir Standart olmayan ozellikler Tarihsel olarak bazi JavaScript motorlari bu standart olmayan ozellikleri destekledi kosullu catch cumleleri Java gibi array comprehensions ve uretec ifadeleri Python gibi kisa fonksiyon ifadeleri function args expr bu deneysel sozdizimi ok islevlerinden once gelir E4X ECMAScript e yerel XML destegi ekleyen bir uzanti surum 21 den beri Firefox ta desteklenmemektedir SozdizimiBasit ornekler JavaScript teki degiskenler var let veya const anahtar sozcukleri kullanilarak tanimlanabilir x adinda bir fonksiyon kapsamli function scoped degisken bildirir ve buna ustu kapali sekilde undefined ozel degerini atar Degeri olmayan degiskenler otomatik undefined tanimsiz olarak ayarlanir var x Degiskenler bunun gibi elle tanimsiz olarak ayarlanabilir var x2 undefined Ornek y adinda bir degiskeni blok kapsaminda block scoped bildirir ve degiskenin bir degeri olmadigi icin onu undefined tanimsiz olarak ayarlar let anahtar sozcugu ECMAScript 2015 te tanitilmistir let y Blok kapsaminda block scoped bir bildirim yapar z artik yeniden deger atanamaz olur ve onu bir string degismezine ayarlar const anahtar sozcugu ECMAScript 2015 te tanitilmistir ve yalnizca net bir sekilde atanir const anahtar sozcugu sabit anlamina gelir ki bu nedenden dolayi degeri value sabit oldugundan degisken bazi ufak istisnalar disinda yeni deger alamaz atanamaz const z bu anahtar sozcugunun degeri yani buraya yeniden atama yapilamaz benimSayim isimli bir degisken bildirilmis ve deger value olarak ona bir sayi degismezi ornegimizde 2 atanmistir let benimSayim 2 benimSayim i yeniden atar ve onun degerini bir dizi degismezi ornegimizde bir seyler atar JavaScript dinamik olarak yazilmis bir dildir bu nedenle bu yonergelerine uygundur benimSayim bir seyler Yukaridaki ornekte hepsinin onunde iki egik cizgi bulunan yorumlara dikkat edin JavaScript te yerlesik Giris Cikis I O islevi yoktur calisma zamani ortami bunu saglar Surum 5 1 deki ECMAScript belirtimi sunlari belirtir aslinda bu spesifikasyonda harici veri girisi veya hesaplanan sonuclarin cikisi icin herhangi bir sart yoktur Ancak cogu calisma zamani ortaminda cikti yazdirmak icin kullanilabilecek bir console objesi bulunur Iste JavaScript te minimalist bir Hello World programi console log Merhaba Dunya HTML belgelerinde bir cikti icin bu program gereklidir write metodu kullanilarak metin nodu dugumu yazilabilir document write bir seyler HTML elementleri de olusturulabilir Oncelikle DOM uzerinde olusturulmalari gerekir const benimElementim document createElement div Class veya id gibi oznitelikler olusturulabilir benimElementim classList add bir seyler benimElementim classList add anotherclass benimElementim id baska seyler Burada oznitelik soyle gorunecektir lt span data attr baz gt lt span gt benimElementim setAttribute data atrr baz Son olarak onu HTML deki lt body gt ogesine bir alt oge olarak ekleyin document body appendChild benimElementim Elementler bir oge olarak querySelector ile yakalanabilir ya da forEach dongusu ile alinabilen birden cok oge querySelectorAll ile yakalanabilir document querySelector class document querySelector id document querySelector data other document querySelectorAll multiple Basit bir ozyinelemeli recursive fonksiyon function faktoriyel n if n 0 return 1 0 1 return n faktoriyel n 1 faktoriyel 3 6 sonucunu dondurur ya da asagidaki ornekte oldugu gibi faktoriyel hesaplamasini kontroller ve uclu operator vasitasiyla da kullanabilirsiniz function faktoriyel n Yalnizca pozitif bir sayi kullanilmasina izin verin yoksa konsolda uyari gosterin if isNaN n console error Sayisal olmayan argumana izin verilmemektedir return NaN bu ozel bir degerdir ve Bu Bir Sayi Degil anlamina gelir if n 0 return 1 0 1 if n lt 0 return undefined Negatif sayilar deger olarak verildiginde tanimsiz bildirimi yapin if n 1 console warn Belirttiginiz n ondalikli degeri en yakin tam sayiya yuvarlanacaktir Tam sayi olmayanlar icin bunun yerine gamma fonksiyonunu kullanmayi dusunun n Math round n Yukaridaki kontrolleri kullanmak istemeyebilirsiniz Zorunlu degildir Bu kisimdan sonra gercek ozyinelemeli faktoriyel hesaplama kodlari yer almaktadir Asagidaki satirda ozyinelemeleli faktoriyel hesaplamada kullanilan fonksiyon ifadesidir ES6 ile birlikte tanitimi yapilan ok fonksiyon soz dizimini kullanir const ozyinelemeli hesaplama a gt a gt 1 a ozyinelemeli hesaplama a 1 1 ile birlikte uclu operator kullanimina dikkat ediniz return ozyinelemeli hesaplama n document write faktoriyel 3 6 dondurur veya lambda let isimsizFonksiyon gt console log Isimsiz bir fonksiyon isimsizFonksiyon Isimsiz bir fonksiyon yazisini konsola getirir Bu ornek JavaScript te yerel olmayan degiskenlerini basvuru yoluyla yakaladigini gosterir Ok islevleri ilk olarak 6 Baski ECMAScript 2015 te tanitildi JavaScript te islev yazmak icin sozdizimini kisaltirlar Ok islevleri anonimdir bu nedenle olusturulduktan sonra onlari cagirmak icin bunlara basvurmak icin bir degisken gerekir Ok islevi arrow fonksiyon ornegi Ok fonksiyonlari arrow functions function anahtar sozcugunu kullanmadan fonskiyon yazmamiza izin verir Buradaki uzun ornek bir anonymous function value sunu gosterir const uzun ornek giris1 giris2 gt console log Merhaba Dunya const cikti giris1 giris2 return cikti Parantez yoksa ok fonksiyonu yalnizca ifadeyi expression dondurur Buradaki gibi giris1 giris2 const kisa ornek giris1 giris2 gt giris1 giris2 console log kisa ornek 2 3 5 dondurur ve ardindan Merhaba Dunya yazdirir console log uzun ornek 2 5 7 dondurur Bir ok fonksiyonunun yalnizca bir parametresi varsa parantezler kaldirilabilir const parantezsiz giris gt giris 2 console log parantezsiz 3 5 dondurur JavaScript te objeler fonskiyonlarla ayni sekilde olusturulur bu nedenle ojbeler bir olarak bilinirler Obje ornegi let kullanici adi Ahmet yasi 41 selamVer this burada mevcut obje dir alert this adi kullanici selamVer Ahmet gosterimi arguments ozel bir degiskendir function topla let x 0 for let i 0 i lt arguments length i x arguments i return x console log topla 1 2 3 dondurur console log topla 1 2 3 6 dondurur genellikle kapanislari closures olusturmak icin kullanilir Kapanislar ozelliklerin properties ve metotlarin bir ad alaninda namespace toplanmasina ve bazilarinin ozel hale getirilmesine izin verir let sayac function let i 0 ozel ozellik return genel metotlar get function alert i set function deger i deger artir function alert i modul sayac get 0 gosterir sayac set 6 sayac artir 7 gosterir sayac artir 8 gosterir JavaScript te modulleri disa ve ice aktarma Export ornegi mymodule js Bu fonksiyon islev disa aktarilmadigi icin ozel olarak kalir let topla a b gt return a b Degiskenleri disa aktar export let adi Metin export let yasi 23 Degiskenleri adlariyla adlandirilmis olarak disa aktar export function ekle sayi1 sayi2 return sayi1 sayi2 Class sinifin disa aktarilmasi export class Carpma constructor sayi1 sayi2 this sayi1 sayi1 this sayi2 sayi2 ekle return topla this sayi1 this sayi2 Import ornegi Bir ozelligi ice dahil etme ice aktarma import ekle from mymodule js console log ekle 1 2 gt 3 Coklu sekilde ozellikleri ice dahil etme ice aktarma import adi yasi from mymodule js console log adi yasi gt Metin 23 Bir moduldeki tum ozellikleri dahil etme ice aktarma import from module js console log adi yasi gt Metin 23 console log ekle 1 2 gt 3 Daha gelismis ornek Iki sayinin en kucuk ortak katini LCM bulur function LCMCalculator x y yapici kurucu fonksiyon if isNaN x y throw new TypeError Sayisal olmayan bagimsiz degiskenlere izin verilmemektedir const checkInt function x ic fonksiyon if x 1 0 throw new TypeError x bir tam sayi degil return x this a checkInt x noktali virgul kullanimi istege baglidir yeni satir yeterlidir this b checkInt y Bir yapici kurucu tarafindan olusturulan obje orneklerinin prototipi o yapici kurucunun prototip ozelligidir LCMCalculator prototype obje degismezi constructor LCMCalculator bir prototipi yeniden atarken yapici kurucu ozelligini uygun sekilde ayarlayin gcd function en buyuk ortak boleni hesaplayan yontem EOklid algoritmasi let a Math abs this a b Math abs this b t if a lt b degiskenlerin takas edilmesi t b b a a t a b b a destructuring yikim atamasini kullanarak takas ES6 while b 0 t b b a b a t Ortak Boleni GCD yalnizca bir kez hesaplamaniz gerekir bu nedenle bu yontemi yeniden tanimlayin Aslinda yeniden tanimlama degildir ornegin kendisinde tanimlanir boylece this gcd LCMCalculator prototype gcd yerine bu yeniden tanimlamaya atifta bulunur LCMCalculator obje uyeleri a ve veya b sonradan degistirilirse bunun yanlis bir sonuca yol acacagini unutmayin Ayrica gcd gcd this gcd this gcd this gcd function return a return a Obje Nesne ozellik adlari cift veya tek tirnak ile sinirlanan stringler ile belirtilebilir lcm function Degisken adlari nesne obje ozellikleriyle cakismaz ornegin lcm this lcm degildir FP hassas sorunlarindan kacinmak icin this a this b seklinde kullanmiyoruz let lcm this a this gcd this b lcm yi yalnizca bir kez hesaplamaniz gerekir bu nedenle bu metodu yeniden tanimlayin this lcm function return lcm return lcm Metotlar ayrica es6 sozdizimi kullanilarak da bildirilebilir toString Degerleri birlestirmek icin hem es6 sablon degismezlerini hem de operatorunu kullanma return LCMCalculator a this a b this b Genel cikti fonksiyonu tanimlayin bu uygulama yalnizca Web tarayicilari icin calisir function output x document body appendChild document createTextNode x document body appendChild document createElement br Not Dizilerin array map ve forEach metotlari JavaScript 1 6 da tanimlanmistir Burada JavaScript in dogal fonksiyonel islevsel yapisini gostermek icin kullanilirlar 25 55 21 56 22 58 28 56 map function pair array literal dizi degismezi mapping function map esleme fonksiyonu return new LCMCalculator pair 0 pair 1 sort a b gt a lcm b lcm bu karsilastirmali fonksiyonla siralama yapin gt ok fonksiyonu bir fonksiyonun kisa bicimidir forEach printResult function printResult obj output obj gcd obj gcd lcm obj lcm Tarayici penceresinde asagidaki cikti goruntulenmelidir 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 638GuvenlikJavaScript ve DOM kotu niyetli yazarlara Web araciligiyla bir istemci bilgisayarda calistirilacak komut dosyalari sunma potansiyeli saglar Tarayici yazarlari iki kisitlama kullanarak bu riski en aza indirir Ilk olarak komut dosyalari dosya olusturma gibi genel amacli programlama gorevlerini degil yalnizca Web ile ilgili eylemleri gerceklestirebilecekleri bir sanal alanda calisir Ikinci olarak komut dosyalari ayni kaynak ilkesiyle sinirlandirilmistir bir Web sitesindeki komut dosyalari baska bir siteye gonderilen kullanici adlari parolalar veya tanimlama bilgileri gibi bilgilere erisemez JavaScript ile ilgili guvenlik hatalarinin cogu ayni kaynak politikasinin veya sanal alanin ihlali ile gerceklesmektedir Genel JavaScript in alt kumeleri ADsafe Secure ECMAScript SES ozellikle ucuncu taraflarca olusturulan kodlarda reklamlar gibi daha yuksek duzeyde guvenlik saglar Closure Toolkit ucuncu taraf JavaScript ve HTML nin guvenli bir sekilde yerlestirilmesi ve yalitilmasi icin baska bir projedir bir Web sayfasinda yalnizca guvenilir kodun yurutulmesini saglamanin ana yontemi ve amacidir Siteler arasi guvenlik aciklari JavaScript ile ilgili yaygin bir guvenlik sorunu ayni kaynak ilkesinin ihlali olan siteler arasi komut dosyasi calistirmadir XSS XSS guvenlik aciklari bir saldirgan cevrimici bankacilik web sitesi gibi hedeflenen bir Web sitesinin kurbana sunulan web sayfasina kotu amacli bir komut dosyasi eklemesine neden oldugunda ortaya cikar Bu ornekteki komut dosyasi daha sonra kurbanin ayricaliklariyla bankacilik uygulamasina erisebilir potansiyel olarak gizli bilgileri ifsa edebilir veya kurbanin izni olmadan para transfer edebilir XSS guvenlik aciklarina bir cozum guvenilmeyen verileri goruntulerken HTML cikisini kullanmaktir Bazi tarayicilar saldirganin kotu amacli komut dosyasi iceren bir URL sagladiginda yansiyan XSS saldirilarina karsi kismi koruma icerir Ancak bu tarayicilarin kullanicilari bile kotu amacli kodun bir veritabaninda depolandigi saldirilar gibi diger XSS saldirilarina karsi savunmasizdir Yalnizca sunucu tarafinda Web uygulamalarinin dogru tasarimi XSS yi tamamen onleyebilir Tarayici yazarlarinin uygulama hatalari nedeniyle de XSS guvenlik aciklari olusabilir Bir baska siteler arasi guvenlik acigi siteler arasi istek sahteciligidir CSRF CSRF de bir saldirganin sitesindeki kod kurbanin tarayicisini kullanicinin hedef sitede amaclamadigi eylemleri gerceklestirmesi icin kandirir bir bankada para transferi gibi Hedef siteler istek dogrulamasi icin yalnizca tanimlama bilgilerine guvendiginde saldirganin sitesindeki koddan kaynaklanan istekler baslatan kullanicinin ayni gecerli oturum acma bilgilerini tasiyabilir Genel olarak CSRF nin cozumu kalici etkileri olabilecek herhangi bir istegin kimligini dogrulamak icin yalnizca cerezlerde degil gizli bir form alaninda bir kimlik dogrulama degeri talep etmektir HTTP Yonlendiren basligini kontrol etmek de yardimci olabilir JavaScript ele gecirme bir saldirganin sitesindeki lt script gt etiketinin kurbanin sitesinde JSON veya JavaScript gibi ozel bilgiler donduren bir sayfadan yararlandigi bir CSRF saldirisi turudur Olasi cozumler sunlari icerir ozel bilgi donduren herhangi bir yanit icin ve GET parametrelerinde bir kimlik dogrulama belirteci eklemek Musteriye duyulan yanlis guven Istemci sunucu uygulamalarinin gelistiricileri guvenilmeyen istemcilerin saldirganlarin denetimi altinda olabilecegini bilmelidir Uygulama yazari JavaScript kodunun amaclandigi gibi veya hic calisacagini varsayamaz cunku koda gomulu herhangi bir sir belirli bir dusman tarafindan ayiklanabilir Bazi cikarimlar sunlardir Web sitesi yazarlari ham kaynak kodunun istemciye gonderilmesi gerektiginden JavaScript lerinin nasil calistigini tam olarak gizleyemezler Kod ancak sasirtma tersine muhendislikle yapilabilir JavaScript form dogrulamasi guvenlik degil yalnizca kullanicilar icin kolaylik saglar Bir site kullanicinin hizmet sartlarini kabul ettigini dogrularsa veya yalnizca sayi icermesi gereken alanlardan gecersiz karakterleri filtrelerse bunu yalnizca istemcide degil sunucuda yapmalidir Komut dosyalari secici olarak devre disi birakilabilir bu nedenle bir goruntuyu kaydetmek icin sag tiklamak gibi islemleri onlemek icin JavaScript e guvenilemez Bir saldirgan tarafindan ayiklanabileceginden sifreler gibi hassas bilgileri JavaScript e gommek cok kotu bir uygulama olarak kabul edilir Gelistiricilere duyulan yanlis guven Npm ve Bower gibi paket yonetim sistemleri JavaScript gelistiricileri arasinda populerdir Bu tur sistemler bir gelistiricinin programlarinin diger gelistiricilerin program kitapliklarina olan bagimliliklarini kolayca yonetmesine izin verir Gelistiriciler kitapliklarin koruyucularinin onlari guvenli ve guncel tutacagina guvenirler ancak bu her zaman boyle degildir Bu kor guven nedeniyle bir guvenlik acigi ortaya cikti Guvenilir kitapliklar kitapliklara dayanan tum programlarda hatalarin veya guvenlik aciklarinin ortaya cikmasina neden olan yeni surumlere sahip olabilir Yani bir kitaplik vahsi dogada bilinen guvenlik aciklariyla yamasiz kalabilir 133 bin web sitesi ornegi incelenmis bir calismada arastirmacilar web sitelerinin 37 sinin bilinen en az bir guvenlik acigina sahip bir kitaplik icerdigini buldu Her web sitesinde kullanilan en eski kutuphane surumu ile bu kutuphanenin mevcut en yeni surumu arasindaki ortalama gecikme ALEXA da 1 177 gundur ve halen aktif olarak kullanilan bazi kutuphanelerin gelistirilmesi yillar once durduruldu Baska bir olasilik bir kutuphanenin yoneticisinin kutuphaneyi tamamen kaldirabilmesidir Bu Mart 2016 da Azer Koculu nun deposunu npm den kaldirmasiyla meydana geldi Bu kutuphanelerine bagli on binlerce programin ve web sitesinin bozulmasina neden oldu Tarayici ve eklenti kodlama hatalari JavaScript bazilari arabellek tasmalari gibi kusurlara sahip olabilen cok cesitli tarayici yetenekleri icin bir arabirim saglar Bu kusurlar saldirganlarin kullanicinin sisteminde istedikleri herhangi bir kodu calistiracak komut dosyalari yazmasina izin verebilir Bu kod hicbir sekilde baska bir JavaScript uygulamasiyla sinirli degildir Ornegin arabellek tasmasi istismari bir saldirganin super kullanici ayricaliklariyla isletim sisteminin API sine erismesine izin verebilir Bu kusurlar Firefox Internet Explorer ve Safari gibi buyuk tarayicilari etkilemistir Video oynaticilar Adobe Flash ve Microsoft Internet Explorer da varsayilan olarak etkinlestirilen cok cesitli ActiveX denetimleri gibi eklentiler JavaScript araciligiyla yararlanilabilen kusurlara da sahip olabilir bu tur kusurlardan gecmiste yararlanilmistir Windows Vista da Microsoft Internet Explorer islemini sinirli ayricaliklarla calistirarak arabellek tasmalari gibi hata risklerini kontrol altina almaya calismistir Google Chrome benzer sekilde sayfa olusturucularini kendi sandbox lariyla sinirlar Korumali alan uygulama hatalari Web tarayicilari ornegin dosya olusturmak veya silmek icin gerekli ayricaliklarla birlikte JavaScript i sanal alanin disinda calistirabilir Bu tur ayricaliklarin Web den koda verilmesi amaclanmamistir Web den JavaScript e yanlis ayricaliklar verilmesi hem Internet Explorer hem de Firefox taki guvenlik aciklarinda rol oynamistir Windows XP Service Pack 2 de Microsoft Internet Explorer da JScript in ayricaliklarini dusurmustur Microsoft Windows bir bilgisayarin sabit surucusundeki JavaScript kaynak dosyalarinin genel amacli korumali alanda olmayan programlar olarak baslatilmasina izin verir bkz Bu JavaScript i VBScript gibi bir Truva ati icin teorik olarak uygun bir vektor yapar ancak JavaScript Truva atlari pratikte nadirdir Donanim aciklari 2015 yilinda guvenlik arastirmacilari tarafindan bir makalede bir saldirisinin JavaScript tabanli bir kavram kaniti uygulamasi aciklanmistir 2017 yilinda tarayici uzerinden JavaScript tabanli bir saldirinin atlayabilecegi gosterildi Buna ASLR Cache veya AnC denir 2018 de Intel ve diger islemcilerde Spekulatif Yurutmeye karsi Spectre saldirilarini aciklayan makale bir JavaScript uygulamasini iceriyordu Gelistirme araclariOnemli araclar dil ile birlikte gelismistir Her buyuk web tarayicisinda JavaScript hata ayiklayici dahil olmak uzere yerlesik web gelistirme araclari bulunur ve gibi araclari bir dizi standart ve yonergeye uygunluk icin JavaScript kodunu tarar Bazi tarayicilarda yerlesik Benchmark js ve jsbench gibi bagimsiz profil olusturma kitapliklari da olusturulmustur Bircok metin duzenleyici IDE JavaScript kodu icin sozdizimi vurgulama destegine sahiptir Ilgili teknolojilerJava Yaygin bir yanilgi JavaScript in Java ile ayni olduguna yoneliktir Her ikisinin de gercekten de C benzeri bir sozdizimi vardir C dili onlarin en yakin ortak ata dilidir Ayrica genellikle korumali alana alinirlar bir tarayici icinde kullanildiginda ve JavaScript Java nin sozdizimi ve standart kitapligi goz onunde bulundurularak tasarlanmistir Ozellikle tum Java anahtar sozcukleri orijinal JavaScript te ayrilmistir JavaScript in standart kitapligi Java nin adlandirma kurallarini takip eder ve JavaScript in Math ve Date objeleri Java 1 0 dan alinan siniflara dayanir Java ve JavaScript ilk olarak 1995 te ortaya cikti ancak Java Sun Microsystems den James Gosling ve JavaScript ise Netscape Communications dan Brendan Eich tarafindan gelistirildi Iki dil arasindaki farkliliklar benzerliklerinden daha belirgindir Java nin vardir JavaScript in yazimi ise Java derlenmis bayt kodundan yuklenirken JavaScript insan tarafindan okunabilir kaynak kodu olarak yuklenir Java nin objeleri JavaScript ler ise prototip tabanlidir Son olarak Java Java 8 e kadar islevsel programlamayi desteklemezken JavaScript Scheme den etkilenerek bunu basindan beri yapmistir JSON JSON veya JavaScript Object Notation JavaScript in obje degismez sozdiziminin bir alt kumesi olarak tanimlanan genel amacli bir veri degisim bicimidir TypeScript TypeScript TS JavaScript in kati sekilde strictly typed yazilan versiyonudur TS degiskenlere ve fonksiyonlara tur aciklamalari ekleyerek farkliliklari gosterir ve JS icinde turlerin tanimlanmasi icin bir tanitim dilidir Bunun disinda TS JS ile istemci tarafinda calistirilmasi kolay anlasilir bir sekilde aktarilmasina izin vermek ve diger JS kodlariyla birlikte calisabilmesi icin hemen hemen ayni ozellik setini paylasir WebAssembly 2017 den beri web tarayicilari bir JavaScript motorunun web sayfasi komut dosyalarinin performans acisindan kritik bolumlerini yerel hiza yakin yurutmesini saglayan ikili bir bicim olan WebAssembly yi desteklemektedir WebAssembly kodu normal JavaScript koduyla ayni sanal alanda calisir WebAssembly nin oncusu olarak hizmet veren bir JavaScript alt kumesidir Aktaricilar Transpilers JavaScript Web in baskin istemci tarafi dilidir ve bircok web sitesi komut dosyasi agirliklidir Bu nedenle gelistirme surecine yardimci olabilecek diger dillerde yazilmis kodu donusturmek icin olusturulmustur Kaynakca Netscape and Sun announce JavaScript PR Newswire December 4 1995 ECMAScript 2023 Language Specification Haziran 2023 Erisim tarihi 2 Mart 2024 Arsivlenmesi gereken baglantiya sahip kaynak sablonu iceren maddeler link ECMAScript 2025 Language Specification 27 Mart 2024 Erisim tarihi 17 Nisan 2024 Arsivlenmesi gereken baglantiya sahip kaynak sablonu iceren maddeler link Seibel Peter 16 Eylul 2009 Coders at Work Reflections on the Craft of Programming ISBN 9781430219484 24 Aralik 2020 tarihinde kaynagindan Erisim tarihi 25 Aralik 2018 Eich The immediate concern at Netscape was it must look like Java a b c d e speakingjs com 27 Subat 2020 tarihinde kaynagindan arsivlendi Erisim tarihi 21 Kasim 2017 Popularity Brendan Eich 3 Temmuz 2011 tarihinde kaynagindan Erisim tarihi 18 Mart 2022 Brendan Eich An Introduction to JavaScript JSConf 2010 YouTube s 22m 29 Agustos 2020 tarihinde kaynagindan Erisim tarihi 25 Kasim 2019 Eich function eight letters I was influenced by AWK Eich Brendan 1998 Foreword Ed JavaScript Bible 3 bas John Wiley amp Sons ISBN 0 7645 3188 3 LCCN 97078208 OCLC 38888873 OL 712205M nodejs node eps GitHub 29 Agustos 2020 tarihinde kaynagindan Erisim tarihi 5 Temmuz 2018 Dictionary com 9 Agustos 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 9 Agustos 2021 JavaScript the definitive guide Ingilizce Beijing Farnham O Reilly 18 Nisan 2011 s 1 ISBN 978 1 4493 9385 4 OCLC 686709345 14 Subat 2022 tarihinde kaynagindan Erisim 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 w3techs com 13 Agustos 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 9 Nisan 2021 a b c d w3techs com 23 Eylul 2018 tarihinde kaynagindan arsivlendi Erisim tarihi 9 Nisan 2021 8 Mayis 2020 tarihinde kaynagindan arsivlendi Erisim tarihi 8 Mayis 2020 Bloomberg 17 Mart 2011 16 Mayis 2012 tarihinde kaynagindan arsivlendi Erisim tarihi 7 Aralik 2011 Monmouth Web Developers 31 Agustos 2018 31 Agustos 2018 tarihinde kaynagindan arsivlendi Erisim tarihi 31 Agustos 2018 Learn the History of Web Browsers washingtonindependent com 31 Agustos 2018 3 Aralik 2021 tarihinde kaynagindan Erisim tarihi 31 Agustos 2018 8 Subat 2008 tarihinde kaynagindan arsivlendi 17 Haziran 2016 10 Subat 2019 tarihinde kaynagindan arsivlendi erisim tarihi 7 Subat 2018 a b speakingjs com 1 Kasim 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 1 Kasim 2021 a b oreilly com 6 Nisan 2001 19 Temmuz 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 16 Temmuz 2016 microsoft com Microsoft 29 Mayis 1996 24 Kasim 2020 tarihinde kaynagindan arsivlendi Erisim tarihi 16 Temmuz 2016 technologizer com 16 Eylul 2010 23 Haziran 2018 tarihinde kaynagindan arsivlendi Erisim tarihi 16 Temmuz 2016 Baker 24 Kasim 2004 7 Mayis 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 8 Mayis 2021 Weber 9 Mayis 2005 BBC News 25 Eylul 2017 tarihinde kaynagindan arsivlendi Big browser comparison test Internet Explorer vs Firefox Opera Safari and Chrome PC Games Hardware Computec Media AG 3 Temmuz 2009 1 Mayis 2012 tarihinde kaynagindan arsivlendi Erisim tarihi 28 Haziran 2010 Lifehacker 11 Haziran 2009 14 Nisan 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 8 Mayis 2021 4 Aralik 2015 tarihinde kaynagindan arsivlendi Erisim tarihi 22 Temmuz 2020 Wired 22 Haziran 2018 tarihinde kaynagindan arsivlendi Erisim tarihi 18 Ocak 2019 es6 features org 18 Mart 2018 tarihinde kaynagindan arsivlendi Erisim tarihi 19 Mart 2018 TheServerSide 19 Temmuz 2018 2 Agustos 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 2 Agustos 2021 Linux com 13 Ocak 2017 2 Agustos 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 2 Agustos 2021 a b The New Stack 4 Mayis 2016 16 Ocak 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 15 Ocak 2021 tc39 es Ecma International 7 Subat 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 15 Ocak 2021 TC39 4 Aralik 2020 tarihinde kaynagindan arsivlendi Erisim tarihi 15 Ocak 2021 a b GitHub 31 Ocak 2020 tarihinde kaynagindan arsivlendi Erisim tarihi 6 Subat 2020 13 Temmuz 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 8 Mayis 2021 Oracle Corporation 5 Haziran 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 8 Mayis 2021 vanilla js com 16 Haziran 2020 tarihinde kaynagindan arsivlendi Erisim tarihi 17 Haziran 2020 Oracle Corporation 11 Aralik 1998 11 Mart 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 8 Mayis 2021 Microsoft Developer Network Microsoft 14 Temmuz 2000 10 Kasim 2017 tarihinde kaynagindan arsivlendi Erisim 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 readwrite com 17 Aralik 2009 17 Haziran 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 16 Temmuz 2016 7 Agustos 2009 tarihinde kaynagindan arsivlendi Erisim tarihi 18 Agustos 2009 11 Subat 2013 tarihinde kaynagindan arsivlendi Erisim tarihi 7 Subat 2013 26 Mayis 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 8 Mayis 2021 13 Agustos 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 3 Mayis 2020 1 Mayis 2020 tarihinde kaynagindan arsivlendi Erisim tarihi 3 Mayis 2020 O Reilly Media Inc 17 Agustos 2006 s 16 ISBN 978 0 596 55447 7 1 Agustos 2020 tarihinde kaynagindan arsivlendi Erisim tarihi 29 Mart 2019 a b c d The DEV Community Ingilizce 28 Ekim 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 28 Ekim 2019 www destroyallsoftware com 28 Ekim 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 28 Ekim 2019 Developer mozilla org 16 Subat 2017 14 Mart 2017 tarihinde kaynagindan arsivlendi Erisim tarihi 24 Subat 2017 a b Flanagan 2006 Mozilla Developer Network Mozilla 25 Nisan 2013 tarihinde kaynagindan arsivlendi Erisim 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 12 Agustos 2011 5 Nisan 2013 tarihinde kaynagindan arsivlendi Erisim tarihi 6 Nisan 2013 Effective JavaScript Addison Wesley 2013 ss 125 127 ISBN 978 0 321 81218 6 Function JavaScript MDN Web Docs Ingilizce 30 Ekim 2021 tarihinde kaynagindan Erisim tarihi 30 Ekim 2021 Es5 github com 28 Ocak 2013 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Mayis 2013 Cocktailjs github io 4 Subat 2017 tarihinde kaynagindan arsivlendi Erisim tarihi 24 Subat 2017 Mozilla Developer Network 5 Eylul 2015 tarihinde kaynagindan arsivlendi Erisim tarihi 28 Agustos 2015 Eloquent JavaScript No Starch Press 2011 ss 139 149 ISBN 978 1 59327 282 1 Mozilla Developer Network Mozilla Foundation 14 Subat 2014 24 Temmuz 2014 tarihinde kaynagindan arsivlendi Erisim tarihi 13 Temmuz 2014 The 23 Aralik 2012 tarihinde kaynagindan arsivlendi Erisim tarihi 22 Aralik 2012 MDN web docs Mozilla 28 Mayis 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 27 Haziran 2018 MDN web docs Mozilla 28 Haziran 2018 tarihinde kaynagindan arsivlendi Erisim tarihi 27 Haziran 2018 26 Kasim 2012 tarihinde kaynagindan arsivlendi Erisim tarihi 22 Aralik 2012 Mozilla Developer Network Mozilla 28 Subat 2013 tarihinde kaynagindan arsivlendi Erisim tarihi 6 Nisan 2013 Mozilla Developer Network Mozilla 13 Nisan 2013 tarihinde kaynagindan arsivlendi Erisim tarihi 6 Nisan 2013 Learnersbucket com 23 Nisan 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 23 Nisan 2019 ADsafe 6 Temmuz 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 8 Mayis 2021 15 Mayis 2013 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Mayis 2013 Google 22 Ocak 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 9 Temmuz 2021 Mozilla Cross Site Scripting Vulnerability Reported and Fixed MozillaZine Talkback Mozillazine org 22 Agustos 2011 tarihinde kaynagindan arsivlendi Erisim tarihi 24 Subat 2017 17 Haziran 2008 ISSN 1797 1993 9 Agustos 2011 tarihinde kaynagindan arsivlendi Erisim tarihi 17 Haziran 2008 ServiceObjects Blog ServiceObjects 3 Haziran 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 3 Haziran 2019 a b PDF Proceedings 2017 Network and Distributed System Security Symposium 21 Aralik 2016 doi 10 14722 ndss 2017 23414 ISBN 978 1 891562 46 4 29 Mart 2017 tarihinde kaynagindan PDF arsivlendi Erisim tarihi 22 Subat 2017 Collins 27 Mart 2016 Quartz 22 Subat 2017 tarihinde kaynagindan arsivlendi Erisim tarihi 22 Subat 2017 CNET 19 Agustos 1998 25 Aralik 2002 tarihinde kaynagindan arsivlendi Blogs msdn com 9 Subat 2006 23 Ocak 2010 tarihinde kaynagindan arsivlendi Erisim tarihi 24 Subat 2017 Part 5 Enhanced Browsing Security Microsoft Docs Changes to Functionality in Windows XP Service Pack 2 9 Agustos 2004 20 Ekim 2021 tarihinde kaynagindan Erisim tarihi 20 Ekim 2021 For one example of a rare JavaScript Trojan Horse see Symantec Corporation JS 13 Eylul 2011 tarihinde Wayback Machine sitesinde Jean Pharuns 30 Temmuz 2015 Motherboard Vice 27 Ocak 2018 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Ocak 2018 Ars Technica 4 Agustos 2015 27 Ocak 2018 tarihinde kaynagindan arsivlendi Erisim tarihi 26 Ocak 2018 slate com 28 Temmuz 2015 30 Temmuz 2015 tarihinde kaynagindan arsivlendi Erisim tarihi 29 Temmuz 2015 benchmarkjs com 19 Aralik 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 6 Kasim 2016 jsben ch 27 Subat 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 13 Agustos 2021 3 Nisan 2008 3 Temmuz 2011 tarihinde kaynagindan arsivlendi Erisim tarihi 19 Ocak 2012 TypeScript JavaScript With Syntax For Types Typescriptlang org 11 Agustos 2022 tarihinde kaynagindan Erisim tarihi 12 Agustos 2022 Visual Studio Magazine 10 Subat 2018 tarihinde kaynagindan arsivlendi Erisim tarihi 9 Subat 2018 asm js 4 Haziran 2014 tarihinde kaynagindan arsivlendi Erisim tarihi 13 Nisan 2014 Dis baglantilarCurlie de JavaScript DMOZ tabanli JavaScript The First 20 Years 6 Mart 2022 tarihinde kaynagindan Erisim tarihi 6 Subat 2022