JavaScript (JS) — bulHTML hámCSS penen bir qatardaveb-platformanıń tiykarǵı texnologiyası hámprogrammalastırıw tili bolıp tabıladı. Dúnya júzilik tordaǵıveb-saytlardıń toqsan toǵız procentiveb-bettiń is-háreketi ushın klient tárepte JavaScriptten paydalanadı[1].
Veb-brauzerlerde klient kodın orınlaytuǵın arnawlı JavaScript dvijogı bar. Bul dvijoklar sonıń menen birge ayırım serverlerde hám hár túrli qosımshalarda da qollanıladı. Brauzerden tıs paydalanıw ushın eń keń tarqalǵan orınlaw sisteması (runtime system) - bulNode.js.
JavaScript — bul ECMAScript standartına sáykes keletuǵın, kóbinese sol waqıttıń ózinde kompilyaciyalanatuǵın joqarı dárejeli til[2]. Ol dinamikalıq tiplestiriwge,prototipke tiykarlanǵanobyektke baǵdarlanıwǵa hám birinshi dárejeli funkciyalarǵa iye. Olwaqıyaǵa tiykarlanǵan,funkcional hámimperativ programmalastırıw usılların qollap-quwatlaytuǵınkóp paradigmalıtil bolıp tabıladı. Onıń tekst, sáneler, turaqlı ańlatpalar, standart maǵlıwmat strukturaları hám Hújjet Obyekt Modeli (DOM) menen islesiw ushın qosımsha programmalastırıw interfeysleri (API) bar.
ECMAScript standartıtarmaqqa qosılıw, saqlaw yamasa grafikalıq imkaniyatlar sıyaqlı hesh qandaykirgiziw/shıǵarıw (I/O) quralların óz ishine almaydı. Ámeliyatta, veb-brauzer yamasa basqa orınlaw sisteması I/O ushın JavaScript API-lerin usınadı.
Java hám JavaScript atı hámsintaksisi jaǵınan uqsas bolsa da, bul eki til bir-birinen ózgeshelenedi hám dizaynı jaǵınan úlken ayırmashılıqqa iye.
Tariyxı
Netscape-te jaratılıwı
Grafikalıq paydalanıwshı interfeysine iye birinshi keń tarqalǵanveb-brauzer Mosaic 1993-jılı shıǵarıldı. Keyinirek Mosaic-tiń jetekshi baǵdarlamashıları Netscape korporaciyasına tiykar saldı hám 1994-jılı Netscape Navigator atlı anaǵurlım jetilistirilgen brauzerdi shıǵardı. Bul tez arada eń kóp qollanılatuǵın brauzerge aylandı[3].
Vebtiń bul qáliplesiw jıllarındaveb-betler tek statikalıq bolıp, brauzerge júklengennen keyin dinamikalıq is-háreket imkaniyatı joq edi. Gúllep-rawajlanıp atırǵan veb-baǵdarlamalastırıw tarawında bul sheklewdi alıp taslawǵa umtılıs boldı, sonlıqtan 1995-jılı Netscape kompaniyası Navigatorǵaprogrammalastırıw tilin qosıwdı sheshti. Olar oǵan erisiw ushın eki joldı tańladı:Java tilin engiziw ushınSun Microsystems penen birge islesiw, hám sol waqıttıń ózinde Scheme tilin engiziw ushın Brendan Eyx (Brendan Eich) ti jallaw[4].
Maqset «kópshilikke arnalǵan til»,[5] «baǵdarlamashı emeslerge dinamikalıq, interaktivveb-saytlar jaratıwǵa járdem beriw» edi[6]. Netscape basqarması tez arada eń jaqsı sheshim Eyxtiń sintaksisi Java-ǵa uqsas hám Scheme yamasa basqa ámeldegi skript tillerine azıraq uqsaytuǵın jańa til oylap tabıwı ekenligine qarar etti. Jańa til hám onıńinterpretatorı 1995-jıl sentyabrde Navigatordıń beta-versiyası quramında birinshi ret shıǵarılǵanda LiveScript dep atalǵan bolsa da, dekabrdegi rásmiy relizde onıń atı JavaScriptke ózgertildi[7][8].
JavaScript atınıń tańlanıwı aljasıwlarǵa sebep boldı, bul onıń Java menen tikkeley baylanıslı ekenligin ańlatatuǵın edi. Sol waqıtta dot-kom bumi baslanǵan hám Java jańa ataqlı til edi, sonlıqtan Eyx JavaScript atın Netscape tárepinen marketing hiylesi dep esapladı.
Microsoft tárepinen qabıl etiliwi
Microsoft 1995-jılı Internet Explorerdi shıǵardı, bul Netscape penen brauzerler urısına alıp keldi. JavaScript baǵdarında Microsoft JScript dep atalǵan óziniń interpretatorın jarattı[9].
Microsoft JScript-ti birinshi ret 1996-jılıCSS-ti dáslepki qollap-quwatlawı hámHTML keńeytpeleri menen birge shıǵardı. Bul implementaciyalardıń hárbiri Netscape Navigatordaǵı uqsaslarınan aytarlıqtay dárejede ayırmashılıq etti[10][11]. Bul ayırmashılıqlar baǵdarlamashılar ushın ózveb-saytlarınıń eki brauzerde de durıs islewin támiyinlewdi qıyınlastırdı, bul bir neshe jıl dawamında «Netscape-te jaqsıraq kórinedi» hám «Internet Explorerde de jaqsıraq kórinedi» logotipleriniń keń tarqalıwına sebep boldı[12].
JScripttiń rawajlanıwı
Brendan Eyx keyinirek bul dáwir haqqında bılay dedi: «Ol ele de qosımsha til sıyaqlı. Onı áste yamasa tártipke salıwshı dep esaplaydı. Adamlar eski brauzerdiń tómengi jaǵındaǵı eski status qatarında qalıp shıǵıwshı aynalar yamasa jıljıytuǵın xabarlardı isleydi»
1996-jıl noyabrde Netscape barlıq brauzer óndiriwshileri sáykes kele alatuǵın standart specifikaciyanıń baslanǵısh noqatı retinde JavaScriptti Ecma International shólkemine usındı. Bul 1997-jıl iyun ayında birinshi ECMAScript til specifikaciyasınıń rásmiy shıǵarılıwına alıp keldi.
Standartlastırıw procesi bir neshe jıl dawam etti, 1998-jıl iyun ayında ECMAScript 2 hám 1999-jıl dekabrde ECMAScript 3 shıǵarıldı. ECMAScript 4 ústindegi jumıslar 2000-jılı baslandı.
Biraq, tildi tolıq standartlastırıwǵa talpınıwlar Microsofttıń brauzer bazarında tez pát penen ústem poziciyaǵa iye bolıwı sebepli toqtap qaldı. 2000-jıllardıń basına kelip, Internet Explorerdiń bazar úlesi 95%-ke jetti[13]. Bul JScripttiń veb-te klient táreptegi skriptlew ushın de-fakto standartqa aylanǵanın ańlattı.
Microsoft dáslep standartlastırıw processine qatnastı hám óziniń JScript tilinde ayırım usınıslardı ámelge asırdı, biraq aqıbetinde ol ECMA jumıslarında birge islesiwdi toqtattı. Solay etip ECMAScript 4 toqtatıldı.
Ósiw hám standartlastırıw
2000-jıllardıń basında Internet Explorer ústemligi dáwirinde klient táreptegi skriptlew turaqlı jaǵdayda edi. Bul jaǵday 2004-jılı Netscape-tiń miyrasxorı Mozilla kompaniyası Firefox brauzerin shıǵarǵannan keyin ózgere basladı. Firefox kópshilik tárepinen jaqsı qabıl etildi hám Internet Explorerden ádewir bazar úlesin aldı[14].
2005-jılı Mozilla ECMA International shólkemine qosıldı hám XML ushın ECMAScript (E4X) standartı boyınsha jumıslar baslandı. Bul Mozillanıń Macromedia (keyinirek Adobe Systems tárepinen satıp alınǵan) menen birgelikte islesiwine alıp keldi, olar ózleriniń ECMAScript 4 joybarına tiykarlanǵan ActionScript 3 tilinde E4X-ti ámelge asırıp atırǵan edi. Maqset ActionScript 3-ti jańa ECMAScript 4 retinde standartlastırıw boldı. Usı maqsette, Adobe Systems Tamarin implementaciyasın ashıq kodlı proekt retinde shıǵardı. Biraq, Tamarin hám ActionScript 3 ámeldegi klient táreptegi skriptlewden júdá ayırmashılıq etti hám Microsofttıń birge islewisiz ECMAScript 4 hesh qashan nátiyjege erise almadı.
Sol waqıtta ECMA jumısları menen baylanıslı bolmaǵan ashıq kodlı jámiyetlerde júdá áhmiyetli waqıyalar bolıp atır edi. 2005-jılı Djessi Djeyms Garrett aq qaǵaz járiyaladı, onda olAjax terminin oylap taptı hám maǵlıwmatlardı fonda júklewge imkaniyat beretuǵın, usılayınsha betti tolıq qayta júklewge mútájlikti joq etetuǵın bir qatar texnologiyalardı súwretledi, bul texnologiyalardıń tiykarı JavaScript edi. Bul ashıq kodlı kitapxanalar hám olardıń átirapında qáliplesken jámiyetlerdiń basshılıǵında JavaScripttiń qayta tikleniw dáwirin baslap berdi. jQuery, Prototype, Dojo Toolkit hám MooTools sıyaqlı kóplegen jańa kitapxanalar jaratıldı.
Google 2008-jılı óziniń Chrome brauzerin shıǵardı, onıń V8 JavaScript dvijogı básekileslerinen tezirek edi[15][16]. Tiykarǵı innovaciya sol waqtıń ózinde kompilyaciyalaw (JIT) boldı,[17] sonlıqtan basqa brauzer óndiriwshileri de JIT ushın óz dvijokların qayta islep shıǵıwı kerek boldı[18].
2008-jıl iyul ayında bul hár túrli táreplerOslodaǵı konferenciyaǵa jıynaldı. Bunıń aqıbetinde 2009-jıldıń basında barlıq tiyisli jumıslardı birlestiriw hám tildi alǵa órletiw boyınsha kelisiwge alıp keldi. Nátiyjede, 2009-jıl dekabr ayında ECMAScript 5 standartı shıǵarıldı.
Jetiliskenlik dárejesine shıǵıw
Til boyınsha úlken jumıslar bir neshe jıl dawam etti hám 2015-jılı ECMAScript 6 járiyalanıwı menen rásmiylestirilgen keń kólemli qosımshalar hám jaqsılanıwlar menen juwmaqlandı[19].
2009-jılı Rayan Dal tárepinenNode.js-tiń jaratılıwı JavaScripttiń veb-brauzerlerden tıs qollanılıwınıń aytarlıqtay dárejede ósiwine túrtki boldı. Node V8 dvijogın, waqıyalar ciklin hám I/O API-lerin birlestiredi, usılayınsha jeke isleytuǵın JavaScript orınlaw sistemasın usınadı[20][21]. 2018-jılǵa kelip, Node millionlaǵan baǵdarlamashılar tárepinen qollanıldı,[22] hám npm dúnyadaǵı hár qanday paket menedjerleri arasında eń kóp modulge iye boldı[23].
ECMAScript specifikaciyasınıń joybarı házirgi waqıttaGitHub-ta ashıq saqlanadı, hám basılımlar úziliksiz jıllıq esabatlar arqalı shıǵarıladı[24]. Tilge kirgiziliwi múmkin bolǵan ózgerisler keń kólemli usınıs procesi arqalı tekseriledi[25][26]. Házir baǵdarlamashılar basılım nomerleriniń ornına keleshektegi funkciyalardıń statusın jeke-jeke tekseredi.
Házirgi JavaScript ekosisteması kóplegen kitapxanalar menenfreymvorklerge, qáliplesken programmalastırıw ámeliyatlarına hám JavaScripttiń veb-brauzerlerden tıs jerlerde keń qollanılıwına iye. Sonıń menen bir qatarda, bir betlik qosımshalar hám basqa da JavaScriptke kóp súyenetuǵın veb-saytlardıń kóbeyiwi menen islep shıǵıw processine járdem beriw ushın bir neshe transpaylerler jaratıldı.
Veb-saytta klient táreptegi qollanılıwı
JavaScript - vebtiń ústemlik etiwshi klient táreptegiskriptlew tili bolıp, barlıq veb-saytlardıń 99%-i onı usı maqsette qollanadı. SkriptlerHTML hújjetlerine jaylastırıladı yamasa onnan qosıladı hám DOM menen óz-ara tásir etedi.
Barlıq tiykarǵıveb-brauzerlerde paydalanıwshınıń qurılmasında kodtı orınlaytuǵın ornatılǵan JavaScript dvijogı bar.
Skriptlengen is-háreketlerge mısallar
- Betti qayta júklemesten,Ajax yamasa WebSocket arqalı jańaveb-bet kontentin júklew. Mısalı,sociallıq mediapaydalanıwshıları aǵımdaǵı betten shıqpastan xabarlar jibere hám qabıl ete aladı.
- Obyektlerdi áste payda etiw hám joq etiw, ólshemin ózgertiw hám jıljıtıw sıyaqlı veb-bet animaciyaları.
- Brauzer oyınların oynaw.
- Aǵımlı media kórsetiliwin basqarıw.
- Qalqımalı reklamalardı yamasa eskertiw aynaların payda etiw.
- Maǵlıwmatlarveb-serverge jiberilmesten aldın veb-formanıń kirgiziw mánislerin tekseriw.
- Paydalanıwshınıń is-háreketi haqqındaǵı maǵlıwmatlardı jazıp alıw hám onı serverge jiberiw. Veb-sayt iyesi bul maǵlıwmatlardı analitika, reklamanı baqlaw hám jekelestiriw ushın paydalana aladı.
- Paydalanıwshını basqa betke qayta baǵdarlaw.
- Saqlaw yamasa IndexedDB standartları arqalı paydalanıwshınıń qurılmasında maǵlıwmatlardı saqlaw hám alıw.
Kitapxanalar hám freymvorklar
Veb-saytlardıń 80%-ten aslamı ózleriniń klient táreptegi skriptlewiniń bir bólimi retinde úshinshi táreptiń JavaScript kitapxanasın yamasa veb-freymvorkın qollanadı[31].
jQuery - bul eń kóp qollanılatuǵını bolıp tabıladı. Basqa belgilikitapxanalarǵa Angular,Bootstrap, Lodash, Modernizr,React, Underscore hám Vue kiredi. jQuery hám Bootstrap sıyaqlı bir neshe opciyalardı birgelikte qollanıw múmkin[32].
Biraq, hesh qanday kitapxana yamasa freymvorktı paydalanbaytuǵın, onıń ornına tolıǵı menen standart JavaScript funkciyalarına súyenetuǵın veb-saytlar ushın «Vanilla JS» termini oylap tabıldı[33].
Basqa qollanıw tarawları
JavaScripttiń qollanılıwı onıń veb-brauzerdegi dáslepki ornınan da keńeydi. Házirgi waqıtta JavaScript dvijokları server táreptegi veb-saytlardı ornalastırıw ushın da, brauzerden tıs qosımshalar ushın da hár túrli basqa programmalıq támiynat sistemalarına jaylastırılǵan.
Server táreptegi JavaScriptti qollanıwdı alǵa ilgerletiw boyınsha dáslepki háreketler Netscape Enterprise Server hám Microsofttıń Internet Information Services[34][35] boldı, biraq olar kishi tarawlar edi[36]. Server táreptegi qollanıw aqıbetinde 2000-jıllardıń aqırında Node.js hám basqa usıllardıń jaratılıwı menen óse basladı.
Electron, Cordova, React Native hám basqa da qosımsha freymvorkleri is-háreketi JavaScriptte ámelge asırılǵan kóplegen qosımshalardı jaratıw ushın qollanıldı. Basqa brauzerden tıs qosımshalarǵa Adobe Acrobattıń PDF hújjetlerin skriptlewdi qollap-quwatlawı[37] hám JavaScriptte jazılǵan GNOME Shell keńeytpeleri kiredi[38].
Oracle kompaniyası JDK 8 versiyasınan baslap óziniń Java islep shıǵıw komplekti (JDK) API kitapxanasınıń bir bólimi retinde Nashorn atlı JavaScript interpretatorın hám jjs buyrıq qatarı interpretatorın usınatuǵın edi. Ol JDK 15-te alıp taslandı. Onıń ornına Oracle GraalJS-ti usındı, onı OpenJDK menen de qollanıw múmkin. Bul JavaScript kodında Java obyektlerin jaratıwǵa hám olarǵa silteme beriwge, sonday-aq Java-da jazılǵan qosımshalarǵa JavaScriptte orınlanıw waqtındaǵı skriptlewdi qosıwǵa imkaniyat beredi[39][40][41][42].
JavaScript ayırım ornatılǵan sistemalarda, ádette Node.js-ti paydalanıw arqalı qollanılǵan[43][44][45].
Ózgeshelikleri
Tómendegi ózgeshelikler, eger anıq kórsetilmese, barlıq sáykes keletuǵın ECMAScript implementaciyaları ushın ulıwma bolıp tabıladı. Gilt sózlerdi qosqanda, keltirilgen rezervlengen sózlerdiń sanı 50-60 tı quraydı hám implementaciyaǵa baylanıslı ózgerip turadı.
Imperativ hám strukturalıq
JavaScriptC tilinen alınǵanstrukturalıq programmalastırıwsintaksisiniń kópshilik bólimin qollap-quwatlaydı (mısalı,if operatorları,while ciklleri,switch operatorları,dowhile ciklleri hám t.b.). Bir bóleklik ózgeshelik - bul kóriw sheńberi: dáslep JavaScriptte tek var menen funkciya kóriw sheńberi bar edi; blok kóriw sheńberi ECMAScript 2015-te let hám const gilt sózleri menen qosıldı. C sıyaqlı, JavaScript te ańlatpalar menen operatorlar arasında ayırmashılıq qoyadı. C-den bir sintaksislik ayırmashılıq - bul útirli noqattı avtomat túrde qoyıw, bul operatorlardı tamamlaytuǵın útirli noqatlardı túsirip qaldırıwǵa imkaniyat beredi[47].
Hálsiz tiplestirilgen
JavaScript hálsiz tiplestirilgen til bolıp, bul qollanılǵan operaciyaǵa baylanıslı belgili bir tiplerdiń jasırın túrlendiriletuǵının ańlatadı[48].
- Ekilik + operatorı, eger eki operand ta san bolmasa, ekewin de qatarǵa aylandıradı. Sebebi, qosıw operatorı biriktiriw (konkatenaciya) operatorı retinde de xızmet etedi.
- Ekilik - operatorı bárqulla eki operandtı da sanǵa aylandıradı.
- Eki unarlıq operator da (+, -) bárqulla operandtı sanǵa aylandıradı. Biraq, + bárqulla San (Number - binary64) tipine aylandıradı, al - BigInt (pútin san) bolsa tipin saqlaydı[49].
Mánisler tómendegishe qatarlarǵa aylandırıladı:
- Qatarlar ózgerissiz qaldırıladı.
- Sanlar ózleriniń qatar kórinisine aylandırıladı.
- Massivlerdiń elementleri qatarlarǵa aylandırıladı, sonnan keyin olar útirler (,) menen biriktiriledi.
- Basqa obyektler [object Object] qatarına aylandırıladı, bul jerde Object - obyekt konstruktorınıń atı.
Mánisler qatarlarǵa aylandırılıp, keyin sol qatarlar sanlarǵa aylandırılıwı arqalı sanǵa túrlendiriledi. Bul processlerdi sáykes túrde qatar hám sanǵa aylandırıw ushın prototipte toString hám valueOf funkciyaların anıqlaw arqalı ózgertiwge boladı.
JavaScript bul túrlendiriwlerdi ámelge asırıw usılı ushın sınǵa alınǵan, sebebi qaǵıydalardıń quramalılıǵı izbe-izliktiń joqlıǵı retinde qáte túsiniliwi múmkin[50]. Mısalı, sanǵa qatardı qosqanda, san biriktiriwden aldın qatarǵa aylandırıladı, biraq qatardan sandı alǵanda, qatar alıw operaciyasınan aldın sanǵa aylandırıladı.
JavaScript tip túrlendiriwleri| shep operand | operator | oń operand | nátiyje |
|---|
| [] (bos massiv) | + | [] (bos massiv) | "" (bos qatar) |
| [] (bos massiv) | + | {} (bos obyekt) | "[object Object]" (qatar) |
| false (logikalıq) | + | [] (bos massiv) | "false" (qatar) |
| "123"(qatar) | + | 1 (san) | "1231" (qatar) |
| "123" (qatar) | - | 1 (san) | 122 (san) |
| "123" (qatar) | - | "abc" (qatar) | NaN (san) |
Kóbinese, {} + [] ańlatpasınıń 0 (san) nátiyje beretuǵını da jiyi aytıladı. Bul qáte túsinik: bul jerde {} bos obyekt emes, al bos kod blogı retinde interpretaciyalanadı, hám bos massiv qalǵan unarlıq + operatorı tárepinen sanǵa aylandırıladı. Eger ańlatpa qawsırmalarǵa alınsa - ({} + []) – onda figuralıq qawsırmalar bos obyekt retinde interpretaciyalanadı hám ańlatpanıń nátiyjesi kútilgenindey "[object Object]" boladı.
Dinamikalıq
Tiplestiriw
JavaScript basqa kóplegen skriptlew tilleri sıyaqlı dinamikalıq tiplestirilgen til bolıp tabıladı. Tip ańlatpa menen emes, al mánis penen baylanıslı boladı. Mısalı, dáslep sanǵa baylanıstırılǵan ózgeriwshi keyinirek qatarǵa qayta tayınlanıwı múmkin[51]. JavaScript obyektlerdiń tipin tekseriw ushın hár túrli usıllardı, sonıń ishinde duck typing usılın da qollap-quwatlaydı.
Orınlanıw waqtında bahalaw
JavaScripttiń quramında orınlanıw waqtında qatar túrinde berilgen operatorlardı orınlay alatuǵıneval funkciyası bar.
Obyektke baǵdarlanıw (prototipke tiykarlanǵan)
JavaScripttegi prototip arqalı miyrasxorlıqtı Duglas Krokford bılay súwretleydi:
Siz prototip obyektlerin jaratasız, hám keyin ... jańa nusqalardı payda etesiz. JavaScriptte obyektler ózgermeli bolǵanlıqtan, biz jańa nusqalardı tolıqtırıp, olarǵa jańa maydanlar hám metodlar bere alamız. Bular keyinirek bunnan da jańa obyektler ushın prototip xızmetin atqara aladı. Bir-birine uqsas kóplegen obyektler jaratıw ushın bizge klasslar kerek emes... Obyektler obyektlerden miyras aladı. Bunnan artıq obyektke baǵdarlanǵan ne bolıwı múmkin?[52]
JavaScriptte obyekt - bul prototip penen tolıqtırılǵan associativ massiv (tómende qarań); hárbir gilt obyekt qásiyeti ushın atamanı beredi, hám bunday atamanı kórsetiwdiń eki sintaksislik usılı bar: noqatlı belgilew (obj.x = 10) hám qawsırmalı belgilew (obj["x"] = 10). Qásiyet orınlanıw waqtında qosılıwı, qayta baylanıstırılıwı yamasa óshiriliwi múmkin. Obyekttiń kópshilik qásiyetleri (hám obyekttiń prototiplik miyrasxorlıq shınjırına tiyisli bolǵan hár qanday qásiyet) for...in cikl arqalı sanap shıǵılıwı múmkin.
Prototipter
Basqa kóplegen obyektke baǵdarlanǵan tiller miyrasxorlıq ushın klasslardı qollanatuǵın bolsa, JavaScript prototiplerdi qollanadı,[53] biraq prototip sisteması menen klassqa tiykarlanǵan ózgesheliklerdiń kópshiligin modellestiriw múmkin[54]. Bunnan tısqarı, ECMAScript 6-versiyası (2015-jıl iyun ayında shıǵarılǵan) tiykarındaǵı prototiplik miyrasxorlıq sistemasın anaǵurlım dástúriy interfeys penen abstraktlastırıw ushın sintaksislik qolaylıq retinde xızmet etetuǵın class, extends hám super gilt sózlerin kirgizdi. Konstruktorlar constructor atlı metodtı kórsetiw arqalı járiyalanadı hám barlıq klasslar Java-ǵa uqsas túrde avtomatlıq túrde tiykarǵı Object klassınıń kishi klassları boladı.
classPerson{constructor(name){this.name=name;}}classStudentextendsPerson{constructor(name,id){super(name);this.id=id;}}constbob=newStudent("Robert",12345);console.log(bob.name);// RobertTiykarǵı obyekt mexanizmi ele de prototiplerge tiykarlanǵan bolsa da, jańa sintaksis basqa obyektke baǵdarlanǵan tillerge uqsas. Jeke ózgeriwshiler maydan atınıń aldına nomer belgisin (#) qoyıw arqalı járiyalanadı, hám polimorfizm tikkeley qollap-quwatlanbaydı, biraq onı berilgen argumentlerdiń sanı hám tipine qarap hár túrli funkciyalardı qol menen shaqırıw arqalı emulyaciyalawǵa boladı[55].
Funkciyalardıń obyekt konstruktorları retinde xızmet etiwi
Funkciyalar ózleriniń ádettegi roli menen birge, obyekt konstruktorları retinde de xızmet etedi. Funkciya shaqırıwınıń aldına new sózin qoyıw prototip nusqasın jaratadı hám konstruktordan qásiyetler hám metodlardı miyras etip aladı (sonıń ishinde Object prototipinen alınǵan qásiyetler de bar)[56]. ECMAScript 5 Object.create metodın usınadı, bul Object prototipinen avtomat túrde miyras almastan nusqanı anıq jaratıwǵa imkaniyat beredi (eski ortalıqlarda prototipti null-ǵa teńlestiriw múmkin)[57]. Konstruktordıń prototype qásiyeti jańa obyekttiń ishki prototipi ushın qollanılatuǵın obyektti anıqlaydı. Jańa metodlardı konstruktor retinde qollanılǵan funkciyanıń prototipin ózgertiw arqalı qosıwǵa boladı.
// Bul kod aldınǵı úzindige tolıǵı menen ekvivalentfunctionPerson(name){this.name=name;}functionStudent(name,id){Person.call(this,name);this.id=id;}varbob=newStudent("Robert",12345);console.log(bob.name);// RobertJavaScripttiń Array hám Object sıyaqlı ornatılǵan klasslarınıń da ózgertiliwi múmkin bolǵan prototipleri bar. Biraq, ornatılǵan obyektlerdi ózgertiw ádette durıs emes ámeliyat dep esaplanadı, sebebi úshinshi tárep kodı bul obyektlerden metodlar hám qásiyetlerdi paydalanıwı yamasa miyras alıwı múmkin hám prototiptiń ózgertiliwin kútpewi múmkin[58].
Funkciyalardıń metodlar retinde xızmet etiwi
Kóplegen obyektke baǵdarlanǵan tillerden ayırmashılıǵı, JavaScriptte funkciya anıqlaması menen metod anıqlaması arasında ayırmashılıq joq. Kerisinshe, bul ayırmashılıq funkciya shaqırılıwı waqtında payda boladı. Funkciya obyekttiń metodı retinde shaqırılǵanda, funkciyanıń jergilikli this gilt sózi sol shaqırıw ushın sol obyektke baylanıstırıladı.
Funkcional
JavaScript funkciyaları birinshi klasslı bolıp tabıladı; funkciya obyekt dep esaplanadı[59]. Solay etip, funkciyanıń .call() hám .bind() sıyaqlı qásiyetleri hám metodları bolıwı múmkin[60].
Leksikalıq jabılıw
Ishki funkciya - bul basqa funkciyanıń ishinde anıqlanǵan funkciya. Ol sırtqı funkciya hár shaqırılǵanda jaratıladı.
Bunnan tısqarı, hárbir ishki funkciya leksikalıq jabılıw payda etedi: sırtqı funkciyanıń leksikalıq kóriw sheńberi (turaqlı, jergilikli ózgeriwshi yamasa argument mánisin qosqanda) sırtqı funkciyanıń orınlanıwı tamamlanǵannan keyin de hár bir ishki funkciya obyektiniń ishki jaǵdayınıń bir bólimine aylanadı.
Anonim funkciya
JavaScript sonıń menen birge anonim funkciyalardı da qollap-quwatlaydı.
Delegativ
JavaScript jasırın hám ashıq delegaciyanı qollaydı.
Funkciyalardıń roller retinde xızmet etiwi (Treytler hám Miksinler)
JavaScript Treytler (Traits)[61] hám Miksinler (Mixins)[62][63] sıyaqlı Rol[64] úlgileriniń funkciyaǵa tiykarlanǵan hár túrli implementaciyaların óz ishinde qollaydı. Bunday funkciya óziniń funkciya denesi ishinde this gilt sózine baylanıstırılǵan keminde bir metod arqalı qosımsha is-háreketti anıqlaydı. Keyin Rol call yamasa apply arqalı prototip shınjırı arqalı bólisilmegen qosımsha is-háreketke iye bolıwı kerek bolǵan obyektlerge anıq delegatlanıwı kerek.
Obyekt kompoziciyası hám miyrasxorlıq
JavaScriptte funkciyaǵa tiykarlanǵan ashıq delegatlaw kompoziciyanı qamtıytuǵın bolsa da, jasırın delegatlaw prototip shınjırı hár qarap shıǵılǵanda, mısalı, obyektke tikkeley tiyisli bolmaǵan, biraq onıń menen baylanıslı bolıwı múmkin bolǵan metodtı tabıw ushın júz beredi. Metod tabılǵannan keyin, ol usı obyekttiń kontekstinde shaqırıladı. Solay etip, JavaScripttegi miyrasxorlıq konstruktor funkciyalarınıń prototype qásiyetine baylanıslı delegatlaw avtomatizmi menen támiyinlenedi.
Hár qıylı
Nolden baslanatuǵın nomerlew
JavaScript nolden baslap indekslenetuǵın til bolıp tabıladı.
Variativ funkciyalar
Funkciyaǵa belgisiz sandaǵı parametrler beriwge boladı. Funkciya olarǵa formal parametrler arqalı hám de jergilikli arguments obyekti arqalı kire aladı. Variativ funkciyalardı bind metodın paydalanıw arqalı da jaratıwǵa boladı.
Massiv hám obyekt literalları
Kóplegen skriptlew tillerindegi sıyaqlı, massivler hám obyektler (basqa tillerde associativ massivler) hár biri qısqa ápiwayı sintaksis penen jaratılıwı múmkin. Negizinde, bul literallarJSON maǵlıwmat formatınıń tiykarın quraydı.
Turaqlı ańlatpalar
JavaScript tekstti izlew hám ózgertiw ushın turaqlı ańlatpalardı qollap-quwatlaydı.
Wádeler (Promises)
Kirgizilgen Promise obyekti wádelerdi qayta islew hám qayta islewshilerdi asinxron hárekettiń aqırǵı nátiyjesi menen baylanıstırıw funkciyasın usınadı. JavaScript bir neshe JavaScript wádelerin birlestiriwge hám hár túrli scenariylerge tiykarlanǵan operaciyalardı orınlawǵa imkaniyat beretuǵın kombinator metodların usınadı. Kirgizilgen metodlar: Promise.race, Promise.all, Promise.allSettled hám Promise.any.
Async/await
Async/await asinxron, bloklamaytuǵın funkciyanı ádettegi sinxron funkciyaǵa uqsas etip strukturalastırıwǵa imkaniyat beredi. Minimal qosımsha júkleme menen, dástúrli sinxron, bloklaytuǵın kodqa uqsas strukturalanǵan asinxron, bloklamaytuǵın kod jazıwǵa boladı.
Vendorǵa tán keńeytpeler
Tariyxıy jaqtan, ayırım JavaScript dvijokları mına standart emes ózgesheliklerdi qollap-quwatlaǵan:
- massivti generaciyalaw hám generator ańlatpaları (Python sıyaqlı)
- qısqa funkciya ańlatpaları (function(args) expr; bul eksperimental sintaksis baǵdarlı funkciyalardan aldın payda bolǵan)
- XML ushın ECMAScript (E4X), ECMAScriptke jergilikli XML qollap-quwatlawın qosatuǵın keńeytpe (Firefoxtıń 21-versiyasınan baslap qollap-quwatlanbaydı[65])
Sintaksis
JavaScripttegi ózgeriwshilervar,[66]let[67] yamasaconst[68] gilt sózleri arqalı anıqlanıwı múmkin. Gilt sózlersiz anıqlanǵan ózgeriwshiler global kólemde anıqlanadı.
Baǵdarlı funkciyalar birinshi ret 6-basılım – ECMAScript 2015-te kirgizilgen. Olar JavaScriptte funkciyalar jazıw sintaksisin qısqartadı. Baǵdarlı funkciyalar anonim bolǵanlıqtan, eger olar qawsırmalar menen qorshalıp, tez arada orınlanbasa, jaratılǵannan keyin olardı shaqırıw ushın ózgeriwshi kerek boladı.
Tómende JavaScript sintaksisiniń bir mısalı keltirilgen..
// 'x' atlı funkciya-kólemli ózgeriwshini járiyalaydı hám oǵan anıq emes túrde// arnawlı undefined mánisin beredi. Mánisi joq ózgeriwshilerge avtomat túrde// undefined mánisi beriledi.// var ádette durıs emes ámeliyat dep esaplanadı hám kóbinese let hám const qollanılǵanı maqul.varx;// Ózgeriwshilerge undefined mánisin qoldan tómendegishe beriwge boladıletx2=undefined;// 'y' atlı blok-kólemli ózgeriwshini járiyalaydı hám oǵan anıq emes túrde// undefined mánisin beredi. let gilt sózi ECMAScript 2015-te kirgizilgen.lety;// 'z' atlı blok-kólemli, qayta tayınlanbaytuǵın ózgeriwshini járiyalaydı hám oǵan// qatar literalın beredi. const gilt sózi de ECMAScript 2015-te kirgizilgen,// hám oǵan anıq mánis beriliwi kerek.// const gilt sózi turaqlı degen mánisti bildiredi, sonlıqtan ózgeriwshini qayta tayınlaw múmkin emes,// sebebi onıń mánisi turaqlı bolıp tabıladı.constz="bul mánisti qayta tayınlay almaydı!";// Global-kólemli ózgeriwshini járiyalaydı hám oǵan 3 mánisin beredi. Bul ádette// durıs emes ámeliyat dep esaplanadı hám eger qatań rejim qosılǵan bolsa, islemeydi.t=3;// myNumber atlı ózgeriwshini járiyalaydı hám oǵan san literalın (mánisi// 2) beredi.letmyNumber=2;// myNumber ózgeriwshisin qayta tayınlaydı hám oǵan qatar literalın (mánisi "foo") beredi.// JavaScript - dinamikalıq tiplestirilgen til, sonlıqtan bul nızamlı.myNumber="foo";
Joqarıdaǵı mısallardaǵı kommentariyalarǵa itibar beriń, olardıń hámmesiniń aldında eki qıya sızıqsha bar.
Kóbirek mısallardı JavaScript sintaksis mısalları boyınsha Wikibooks betinen tabıwǵa boladı.
Qáwipsizlik
JavaScript hám DOM jaman niyetli avtorlarǵa veb arqalı klient kompyuterinde orınlanatuǵın skriptlerdi jetkerip beriw potencialın beredi. Brauzer avtorları bul qáwipti eki sheklewdi qollanıw arqalı kemeytedi. Birinshiden, skriptler qorǵalǵan ortalıqta iske túsedi, onda olar tek vebke baylanıslı háreketlerdi orınlay aladı, fayllardı jaratıw sıyaqlı ulıwma maqsetli programmalastırıw wazıypaların emes. Ekinshiden, skriptler birdey derek siyasatı menen sheklengen: bir veb-sayttan alınǵan skriptler basqa saytqa jiberilgen paydalanıwshı atları, paroller yamasa cookie-ler sıyaqlı informaciyaǵa kire almaydı. JavaScriptke baylanıslı qáwipsizlik kemshilikleriniń kópshiligi ya birdey derek siyasatın yamasa qáwipsiz ortalıqtı buzıw bolıp tabıladı.
Ulıwma JavaScripttiń kishi toplamları — ADsafe, Secure ECMAScript (SES) — bar, olar ásirese úshinshi tárepler tárepinen jaratılǵan kodqa (mısalı, reklamalar) baylanıslı joqarı dárejedegi qáwipsizlikti támiyinleydi[69][70]. Closure Toolkit - bul úshinshi tárep JavaScript hám HTML-di qáwipsiz jaylastırıw hám izolaciyalawǵa arnalǵan jáne bir proekt[71].
Kontent Qáwipsizlik Siyasatı veb-bette tek isenimli kodtıń orınlanıwın támiyinlewdiń tiykarǵı maqsetli usılı bolıp tabıladı.
Saytlar aralıq skriptlew
JavaScriptke baylanıslı keń tarqalǵan qáwipsizlik máseleleriniń biri bul saytlar aralıq skriptlew (XSS) bolıp, ol birdey derek siyasatın buzıw bolıp tabıladı. XSS hálsizlikleri hújim etiwshi maqsetli veb-sayttı, mısalı, onlayn-banking veb-saytın, jábirleniwshige kórsetiletuǵın veb-bettiń quramına jaman niyetli skriptti qosıwǵa májbúr ete alǵanda júz beredi. Bul mısaldaǵı skript keyin jábirleniwshiniń jeńillikleri menen banking qosımshasına kire aladı, bul potencial túrde jasırın informaciyanı ashıwǵa yamasa jábirleniwshiniń ruqsatısız aqsha ótkiziwge alıp keliwi múmkin. XSS hálsizliklerine qarsı áhmiyetli sheshimlerdiń biri - bul HTML tazalaw.
Ayırım brauzerler shaǵılısqan XSS hújimlerine qarsı bólek qorǵanıwdı óz ishine aladı, bunda hújim etiwshi zıyanlı skripti bar URL-di usınadı. Degen menen, hátte sol brauzerlerdiń paydalanıwshıları da basqa XSS hújimlerine, mısalı, zıyanlı kod maǵlıwmatlar bazasında saqlanatuǵın hújimlerge, hálsiz boladı. Tek ǵana server táreptegi veb-qosımshalardıń durıs proektlestiriliwi XSStiń aldın tolıq alıwı múmkin.
XSS hálsizlikleri brauzer avtorlarınıń implementaciyadaǵı qátelikleri sebepli de payda bolıwı múmkin[72].
Saytlar aralıq sorawdı qoldan uqsatıp islew
Saytlar aralıq basqa bir hálsizlik - bul saytlar aralıq sorawdı qoldan uqsatıp islew (CSRF). CSRF-te, hújim etiwshiniń saytındaǵı kod jábirleniwshiniń brauzerin maqsetli saytta paydalanıwshı qálemegen háreketlerdi (mısalı, bankte aqsha ótkiziw) orınlawǵa májbúrleydi. Maqsetli saytlar sorawdıń autentifikaciyası ushın tek ǵana cookie-lerge súyense, hújim etiwshiniń saytındaǵı kodtan kelip shıqqan sorawlar baslawshı paydalanıwshınıń sol nızamlı kirgizilgen maǵlıwmatların tasıy aladı. Ulıwma alǵanda, CSRF-ke sheshim - bul uzaq múddetli tásirge iye bolıwı múmkin bolǵan hár qanday sorawdı autentifikaciyalaw ushın tek cookie-lerde ǵana emes, al jasırın forma maydanında da autentifikaciya mánisin talap etiw. HTTP Referrer baslıǵın tekseriw de járdem beriwi múmkin.
«JavaScriptti urlaw» - bul CSRF hújiminiń bir túri bolıp, onda hújim etiwshiniń saytındaǵı <script> tegi jábirleniwshiniń saytındaǵıJSON yamasa JavaScript sıyaqlı jeke informaciyanı qaytaratuǵın betten paydalanadı. Múmkin bolǵan sheshimlerge tómendegiler kiredi:
- jeke informaciyanı qaytaratuǵın hár qanday juwap ushın POST hám GET parametrlerinde autentifikaciya tokenin talap etiw.
Klientke isenimsizlik
Klient-server qosımshalarınıń baǵdarlamashıları isenimsiz klientler hújim etiwshilerdiń basqarıwında bolıwı múmkin ekenligin moyınlaw kerek. Qosımsha avtorı óziniń JavaScript kodı kútilgenindey (yamasa ulıwma) isleytuǵınına isenbewi kerek, sebebi kodqa jaylastırılǵan hár qanday qupıya maǵlıwmat qatań niyetli qarsılas tárepinen alınıwı múmkin. Bunıń ayırım aqıbetleri:
- Veb-sayt avtorları ózleriniń JavaScripti qalay isleytuǵının tolıq jasırıp qala almaydı, sebebi dáslepki derek kodı klientke jiberiliwi kerek. Kodtı shatastırıwǵa boladı, biraq shatastırıwdı keri injeneriya etiw múmkin.
- JavaScript arqalı formanı tekseriw tek paydalanıwshılar ushın qolaylılıqtı támiyinleydi, qáwipsizlikti emes. Eger sayt paydalanıwshınıń xızmet kórsetiw shártlerine keliskenin tekserse yamasa tek sanlardan ibarat bolıwı kerek bolǵan maydanlardan nadurıs belgilerdi filtrlese, ol bunı tek klientte emes, al serverde de islewi kerek.
- Skriptlerdi tańlap óshirip qoyıwǵa boladı, sonlıqtan súwretti saqlap alıw ushın oń túymeni basıw sıyaqlı operaciyalardıń aldın alıw ushın JavaScriptke iseniwge bolmaydı[73].
- Paroller sıyaqlı konfidencial informaciyanı JavaScriptke jaylastırıw júdá jaman ámeliyat dep esaplanadı, sebebi onı hújim etiwshi alıp shıǵıwı múmkin[74].
- Prototip pataslanıwı - bul orınlanıw waqtındaǵı hálsizlik bolıp, onda hújim etiwshiler obyekttiń prototipindegi qálegen qásiyetlerdiń ústin qayta jaza aladı.
Baǵdarlamashılarǵa orınsız isenim
npm hám Bower sıyaqlı paketlerdi basqarıw sistemaları JavaScript baǵdarlamashıları arasında keń tarqalǵan. Bunday sistemalar baǵdarlamashıǵa óz programmasınıń basqa baǵdarlamashılardıń programma kitapxanalarına bolǵan ǵárezliliklerin ańsat basqarıwǵa imkaniyat beredi. Baǵdarlamashılar kitapxanalardıń qollap-quwatlawshıları olardı qáwipsiz hám jańalanǵan jaǵdayda saqlaytuǵınına isenedi, biraq bul bárqulla olay emes. Bul soqır isenim sebepli hálsizlik payda boldı. Súyeniletuǵın kitapxanalardıń jańa relizleri bolıwı múmkin, bul sol kitapxanalarǵa súyenetuǵın barlıq programmalarda qátelikler yamasa hálsizliklerdiń payda bolıwına sebep boladı. Kerisinshe, kitapxana belgili hálsizlikleri menen jańalanbastan qalıp qoyıwı múmkin. 133 000 veb-sayttıń úlgisin úyreniw boyınsha ótkerilgen bir izertlewde, izertlewshiler veb-saytlardıń 37%-i keminde bir belgili hálsizligi bar kitapxananı óz ishine alǵanın anıqladı. «Hárbir veb-saytta qollanılǵan eń eski kitapxana versiyası menen sol kitapxananıń eń sońǵı bar versiyası arasındaǵı ortasha keshigiw ALEXA-da 1177 kúnge teń, al ele de aktiv qollanılıp atırǵan ayırım kitapxanalardı islep shıǵıw bir neshe jıl aldın toqtatılǵan.»[75] Taǵı bir itimal, kitapxananıń qollap-quwatlawshısı kitapxananı tolıǵı menen óshirip taslawı múmkin. Bul 2016-jıl mart ayında Azer Kochulu óziniń repozitoriyasın npm-nen óshirip taslaǵanda júz berdi. Bul onıń kitapxanalarına súyenetuǵın on mıńlaǵan programma hám veb-saytlardıń islemey qalıwına sebep boldı[76][77].
Brauzer hám plagin kodlaw qáteleri
JavaScript brauzerdiń keń kólemli imkaniyatlarına interfeys usınadı, olardıń ayırımında buferdiń tolıp ketiwi sıyaqlı kemshilikler bolıwı múmkin. Bul kemshilikler hújim etiwshilerge paydalanıwshınıń sistemasında ózleri qálegen kodtı iske túsiretuǵın skriptler jazıwǵa imkaniyat beriwi múmkin. Bul kod hesh qanday sheklewsiz basqa JavaScript qosımshası bolıwı shárt emes. Mısalı, buferdiń tolıp ketiwi hújimi hújim etiwshige operaciyalıq sistemanıń API-ine superuser jeńillikleri menen kiriwge imkaniyat bere aladı.
Bul kemshilikler Firefox,[78] Internet Explorer,[79] hám Safari[80] sıyaqlı tiykarǵı brauzerlerge tásir etti.
Video pleerler, Adobe Flash sıyaqlı plaginler hám Microsoft Internet Explorer-de standart túrde qosılǵan ActiveX basqarıw elementleriniń keń assortimenti de JavaScript arqalı paydalanıwı múmkin bolǵan kemshiliklerge iye bolıwı múmkin (bunday kemshilikler burın paydalanılǵan)[81][82].
Windows Vista-da Microsoft kompaniyası buferdiń tolıp ketiwi sıyaqlı qátelerdiń qáwpin Internet Explorer processin sheklengen jeńillikler menen iske túsiriw arqalı sheklewge háreket etti[83]. Google Chrome da usıǵan uqsas óziniń bet renderlewshilerin ózleriniń «qáwipsiz ortalıǵında» shekleydi.
Qorǵalǵan ortalıq implementaciya qáteleri
Veb-brauzerler JavaScriptti qorǵalǵan ortalıqtan tıs, mısalı, fayllardı jaratıw yamasa óshiriw ushın kerekli huqıqlar menen iske túsiriwge uqıplı. Bunday huqıqlardı vebten alınǵan kodqa beriw itibarǵa alınbaǵan.
Vebten alınǵan JavaScriptke huqıqlardı nadurıs beriw Internet Explorer[84] hám Firefox[85] ta da hálsizliklerde rol oynaǵan. Windows XP Service Pack 2-de Microsoft Internet Explorer-de JScripttiń huqıqların páseytti[86].
Microsoft Windows kompyuterdiń qattı diskindegi JavaScript derek faylların ulıwma maqsetli, qorǵalǵan ortalıqtan tıs programmalar retinde iske túsiriwge imkaniyat beredi (qarań: Windows Script Host). Bul JavaScriptti (VBScript sıyaqlı) Troyan atı ushın teoretikalıq jaqtan múmkin bolǵan vektorǵa aylandıradı, biraq ámeliyatta JavaScript Troyan atları kem ushırasadı[87].
Apparatlıq támiynat hálsizlikleri
2015-jılı qáwipsizlik izertlewshileri tárepinen jazılǵan maqalada rowhammer hújiminiń JavaScriptke tiykarlanǵan koncepciyanı dálillewshi implementaciyası súwretlendi[88][89][90].
2017-jılı brauzer arqalı isleytuǵın JavaScriptke tiykarlanǵan hújim kórsetildi, ol ASLR-dı aylanıp óte alatuǵın edi. Ol «ASLR⊕Cache» yamasa AnC dep ataladı[91][92].
2018-jılı Intel hám basqa processorlardaǵı Boljamlı Orınlawǵa qarsı Spectre hújimlerin járiyalaǵan maqalada JavaScript implementaciyası da bar edi[93].
Baylanıslı texnologiyalar
Java
JavaScripttiń Java menen tikkeley baylanıslı ekenligi keń tarqalǵan qáte túsinik bolıp tabıladı. Eki tildiń de C-ge uqsas sintaksisi bar (C tili olardıń eń jaqın ulıwma ata-baba tili bolıp tabıladı). Olar sonıń menen birge ádette qáwipsiz ortalıqqa jaylastırılǵan, hám JavaScript Java-nıń sintaksisi menen standart kitapxanasın esapqa alıp proektlestirilgen. Atap aytqanda, dáslepki JavaScriptte barlıq Java gilt sózleri rezervlengen, JavaScripttiń standart kitapxanası Javanıń at qoyıw qaǵıydalarına ámel etedi, hám JavaScripttiń Math hám Date obyektleri Java 1.0 klasslarına tiykarlanǵan[96].
Eki til de birinshi ret 1995-jılı payda boldı, biraq Java Sun Microsystems kompaniyasınıń xızmetkeri Djeyms Gosling tárepinen, al JavaScript Netscape Communications kompaniyasınıń xızmetkeri Brendan Eyx tárepinen islep shıǵılǵan.
Eki til arasındaǵı ayırmashılıqlar olardıń uqsaslıqlarına qaraǵanda kóbirek kózge túsedi. Java statikalıq tiplestiriwge iye, al JavaScripttiń tiplestiriwi dinamikalıq. Java kompilyaciyalanǵan bayt-kodtan júklenedi, al JavaScript adam oqıy alatuǵın derek kodı retinde júklenedi. Javanıń obyektleri klassqa tiykarlanǵan, al JavaScripttiń obyektleriprototipke tiykarlanǵan. Aqırında, Java 8-versiyasına shekemfunkcional programmalastırıwdı qollap-quwatlamadı, al JavaScript Scheme tásirine ushırap, baslawdan bunı islegen.
JSON
JSON — bul JavaScriptten alınǵan maǵlıwmat formatı; sonlıqtan onıń atı JavaScript Object Notation ataması. Bul basqa kóplegen programmalastırıw tilleri tárepinen qollap-quwatlanatuǵın keń tarqalǵan format.
Transpaylerler
Kóplegen veb-saytlar JavaScriptke kóp súyenetuǵınlıqtan, islep shıǵıw processine járdem bere alatuǵın basqa tillerde jazılǵan kodtı túrlendiriw ushın transpaylerler jaratılǵan[97].
TypeScript hám CoffeeScript - JavaScriptke transpayl etiletuǵın eki belgili til.
WebAssembly
WebAssembly — bul JavaScriptti tolıqtırıw, ásirese veb-bet skriptleriniń ónimdarlıq ushın áhmiyetli bólimlerin tolıqtırıw ushın proektlestirilgen bayt-kod formatına iye jańa til. Barlıq tiykarǵı JavaScript dvijokları WebAssembly-di qollap-quwatlaydı,[98] ol ádettegi JavaScript kodı menen birdey qáwipsiz ortalıqta isley aladı.
asm.js - bul WebAssembly-diń aldınǵısı bolıp xızmet etken JavaScripttiń bir bólimi[99].