Kontentke ótiw

JavaScript

Wikipedia — erkin enciklopediya
JavaScript
JavaScript derek kodınıń skrinshotı
Paradigmaları Kóp paradigmalı: waqıyaǵa tiykarlanǵan, funkcional, imperativ, proceduralıq, obyektke baǵdarlanǵan
Shańaraǵı ECMAScript
Dóretiwshi Dáslep Netscape kompaniyasınan Brendan Eyx; keyin basqalar ECMAScript standartına úles qostı
Birinshi shıǵıwı 4-dekabr, 1995
Turaqlı reliz ECMAScript 2024 / iyun 2024
Sınaq versiyası ECMAScript 2025 / 27-mart 2024
Tiplestiriw tártibi Dinamikalıq, hálsiz, duck
Yad basqarıwı Qaldıqları jıynalatuǵın
Kóriw sheńberi Leksikalıq
Fayl keńeytpeleri .js • .mjs • .cjs
Veb-saytı ecma-international.org/publications-and-standards/standards/ecma-262/

JavaScript (JS) — bul HTML hám CSS penen bir qatarda veb-platformanıń tiykarǵı texnologiyası hám programmalastırıw tili bolıp tabıladı. Dúnya júzilik tordaǵı veb-saytlardıń toqsan toǵız procenti veb-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) - bul Node.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ǵan obyektke baǵdarlanıwǵa hám birinshi dárejeli funkciyalarǵa iye. Ol waqıyaǵa tiykarlanǵan, funkcional hám imperativ programmalastırıw usılların qollap-quwatlaytuǵın kó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 qanday kirgiziw/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ám sintaksisi 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ǵan veb-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ında veb-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ǵa programmalastırıw tilin qosıwdı sheshti. Olar oǵan erisiw ushın eki joldı tańladı: Java tilin engiziw ushın Sun 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, interaktiv veb-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ám HTML 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 óz veb-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 ol Ajax 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árepler Oslodaǵı 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árepinen Node.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ıtta GitHub-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 menen freymvorklerge, 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ı.

Sawda belgisi

«JavaScript» - bul Amerika Qurama Shtatlarındaǵı Oracle korporaciyasınıń sawda belgisi[27][28]. Bul sawda belgisi dáslep 1997-jılı 6-mayda Sun Microsystems kompaniyasına berilgen edi hám 2009-jılı Oracle Sun-dı satıp alǵanda olarǵa ótti[29][30].

2024-jıl sentyabr ayında Rayan Dal basshılıǵında bir xat tarqatıldı, onda Oracle-dı JavaScript sawda belgisin azat etiwge shaqırǵan. JavaScripttiń dáslepki jaratıwshısı Brendan Eyx bul baslamanı qollap-quwatlaǵan 14 000 nan aslam qol qoyıwshılar arasında boldı.

Veb-saytta klient táreptegi qollanılıwı

JavaScript - vebtiń ústemlik etiwshi klient táreptegi skriptlew tili bolıp, barlıq veb-saytlardıń 99%-i onı usı maqsette qollanadı. Skriptler HTML 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ńa veb-bet kontentin júklew. Mısalı, sociallıq media paydalanı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ıwmatlar veb-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 belgili kitapxanalarǵ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].

Orınlanıwı

JavaScript dvijogı

JavaScript ushın birinshi dvijoklar tek derek kodınıń interpretatorları bolǵan, biraq barlıq zamanagóy tiyisli dvijoklar ónimdarlıqtı arttırıw ushın sol waqıttıń ózinde kompilyaciyalawdı qollanadı. JavaScript dvijokları ádette veb-brauzer óndiriwshileri tárepinen islep shıǵıladı hám hár bir tiykarǵı brauzerdiń óz dvijogı bar. Brauzerde JavaScript dvijogı Hújjet Obyekt Modeli (DOM) hám Web IDL baylanısları arqalı rendering dvijogı menen birgelikte islep turadı. Degen menen, JavaScript dvijokların paydalanıw tek brauzerler menen sheklenbeydi; mısalı, V8 dvijogı Node.js orınlaw sistemasınıń tiykarǵı komponenti bolıp tabıladı. Olar specifikaciyanıń rásmiy atına sáykes ECMAScript dvijokları dep te ataladı. WebAssembly-diń payda bolıwı menen, ayırım dvijoklar bul kodtı ádettegi JavaScript kodı menen birdey qáwipsiz ortalıqta da orınlay aladı.

Orınlaw sisteması

Skriptlerdiń keńirek ortalıq penen óz-ara tásir etiwi ushın JavaScript dvijogı orınlaw sistemasına (mısalı, veb-brauzer yamasa jeke isleytuǵın sistema) jaylastırılıwı kerek. Orınlaw sisteması tarmaqqa qosılıw, saqlaw hám grafika sıyaqlı kirgiziw/shıǵarıw operaciyaları ushın kerekli API-lerdi óz ishine aladı hám skriptlerdi import etiw imkaniyatın beredi.

JavaScript - bir aǵımlı til. Orınlaw sisteması gezegindegi xabarlardı birme-bir qayta islep shıǵadı hám hár bir jańa xabar menen baylanıslı funkciyanı shaqıradı, bul funkciyanıń argumentleri hám jergilikli ózgeriwshileri menen shaqırıwlar stegi ramkasın payda etedi. Shaqırıwlar stegi funkciyanıń mútájliklerine baylanıslı kishireyedi hám úlkeyedi. Funkciya tamamlanǵannan keyin shaqırıwlar stegi bos bolǵanda, JavaScript gezegindegi kelesi xabarǵa ótedi. Bul waqıyalar cikli dep ataladı hám «aqırına shekem orınlaw» dep táriyiplenedi, sebebi kelesi xabar qaralmastan aldın hárbir xabar tolıq qayta islenedi. Biraq, tildiń parallel islew modeli waqıyalar ciklin bloklamaytuǵın dep súwretleydi: programma kirgiziw/shıǵarıw operaciyaları waqıyalar hám keri shaqırıw funkciyaları arqalı ámelge asırıladı. Bul, mısalı, JavaScript maǵlıwmatlar bazası sorawınıń informaciya qaytarıwın kútip turǵan waqıtta tıshqansha basılıw qayta isley alatuǵının ańlatadı[46].

Ataqlı jeke isleytuǵın orınlaw sistemaları: Node.js, Deno hám Bun.

Ó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

JavaScript C tilinen alınǵan strukturalıq programmalastırıw sintaksisiniń kópshilik bólimin qollap-quwatlaydı (mısalı, if operatorları, while ciklleri, switch operatorları, do while 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ǵın eval 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ı.

class Person {
    constructor(name) {
        this.name = name;
    }
}

class Student extends Person {
    constructor(name, id) {
        super(name);
        this.id = id;
    }
}

const bob = new Student("Robert", 12345);
console.log(bob.name); // Robert

Tiykarǵı 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 ekvivalent
function Person(name) {
this.name = name;
}

function Student(name, id) {
Person.call(this, name);
this.id = id;
}

var bob = new Student("Robert", 12345);
console.log(bob.name); // Robert

JavaScripttiń 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 literallar JSON 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 ózgeriwshiler var,[66] let[67] yamasa const[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.
var x;

// Ózgeriwshilerge undefined mánisin qoldan tómendegishe beriwge boladı
let x2 = 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.
let y;

// '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ı.
const z = "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.
let myNumber = 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].

Islep shıǵıw quralları

Til menen birge áhmiyetli qurallar da rawajlandı.

  • Hárbir tiykarǵı veb-brauzerdiń quramında veb-baǵdarlamalastırıw quralları, sonıń ishinde JavaScript debuggeri de bar.
  • ESLint hám JSLint sıyaqlı statikalıq programma analiz quralları JavaScript kodın belgili bir standartlar hám kórsetpelerge sáykesligin tekseredi.
  • Ayırım brauzerlerde ornatılǵan profilerler bar. Benchmark.js hám jsbench sıyaqlı jeke isleytuǵın profillew kitapxanaları da jaratılǵan[94][95].
  • Kóplegen tekst redaktorlarında JavaScript kodı ushın sintaksisti ajıratıp kórsetiw funkciyası bar.

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ń obyektleri prototipke tiykarlanǵan. Aqırında, Java 8-versiyasına shekem funkcional 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].

Derekler

  1. «Usage Statistics of JavaScript as Client-side Programming Language on Websites». W3Techs. Qaraldı: 27-fevral 2024-jıl.
  2. «ECMAScript 2020 Language Specification». 8-may 2020-jılda túp nusqadan arxivlendi. Qaraldı: 8-may 2020-jıl.
  3. Enzer, Larry «The Evolution of the Web Browsers». Monmouth Web Developers (31-avgust 2018-jıl). 31-avgust 2018-jılda túp nusqadan arxivlendi. Qaraldı: 31-avgust 2018-jıl.
  4. «Chapter 4. How JavaScript Was Created». speakingjs.com. 27-fevral 2020-jılda túp nusqadan arxivlendi. Qaraldı: 21-noyabr 2017-jıl.
  5. Fin JS (June 17, 2016), „Brendan Eich – CEO of Brave“, YouTube, qaraldı: February 7, 2018
  6. "Netscape Communications Corp.", Browser enhancements. Encyclopædia Britannica 2006 Ultimate Reference Suite DVD
  7. «TechVision: Innovators of the Net: Brendan Eich and JavaScript». 8-fevral 2008-jılda túp nusqadan arxivlendi.
  8. Han, Sheon (4 March 2024). „JavaScript Runs the World—Maybe Even Literally“. Wired. Qaraldı: 21 August 2024.
  9. «Chapter 5. Standardization: ECMAScript». speakingjs.com. 1-noyabr 2021-jılda túp nusqadan arxivlendi. Qaraldı: 1-noyabr 2021-jıl.
  10. Champeon, Steve «JavaScript, How Did We Get Here?». oreilly.com (6-aprel 2001-jıl). 19-iyul 2016-jılda túp nusqadan arxivlendi. Qaraldı: 16-iyul 2016-jıl.
  11. «Microsoft Internet Explorer 3.0 Beta Now Available». microsoft.com. Microsoft (29-may 1996-jıl). 24-noyabr 2020-jılda túp nusqadan arxivlendi. Qaraldı: 16-iyul 2016-jıl.
  12. McCracken, Harry «The Unwelcome Return of "Best Viewed with Internet Explorer"». technologizer.com (16-sentyabr 2010-jıl). 23-iyun 2018-jılda túp nusqadan arxivlendi. Qaraldı: 16-iyul 2016-jıl.
  13. Baker, Loren (November 24, 2004). "Mozilla Firefox Internet Browser Market Share Gains to 7.4%". Search Engine Journal. https://www.searchenginejournal.com/mozilla-firefox-internet-browser-market-share-gains-to-74/1082/. 
  14. Weber, Tim (May 9, 2005). "The assault on software giant Microsoft". BBC News. https://news.bbc.co.uk/2/hi/business/4508897.stm. 
  15. «Big browser comparison test: Internet Explorer vs. Firefox, Opera, Safari and Chrome». PC Games Hardware. Computec Media AG (3-iyul 2009-jıl). 2-may 2012-jılda túp nusqadan arxivlendi. Qaraldı: 28-iyun 2010-jıl.
  16. Purdy, Kevin «Lifehacker Speed Tests: Safari 4, Chrome 2». Lifehacker (11-iyun 2009-jıl). 14-aprel 2021-jılda túp nusqadan arxivlendi. Qaraldı: 8-may 2021-jıl.
  17. «TraceMonkey: JavaScript Lightspeed, Brendan Eich's Blog». 4-dekabr 2015-jılda túp nusqadan arxivlendi. Qaraldı: 22-iyul 2020-jıl.
  18. „Mozilla asks, 'Are we fast yet?'. Wired. June 22, 2018da túp nusqadan arxivlendi. Qaraldı: January 18, 2019.
  19. «ECMAScript 6: New Features: Overview and Comparison». es6-features.org. 18-mart 2018-jılda túp nusqadan arxivlendi. Qaraldı: 19-mart 2018-jıl.
  20. Professional Node.js: Building JavaScript Based Scalable Software 2017-03-24 sánesinde Wayback Machine saytında arxivlendi., John Wiley & Sons, 01-Oct-2012
  21. Sams Teach Yourself Node.js in 24 Hours 2017-03-23 sánesinde Wayback Machine saytında arxivlendi., Sams Publishing, 05-Sep-2012
  22. Lawton, George «The secret history behind the success of npm and Node». TheServerSide (19-iyul 2018-jıl). 2-avgust 2021-jılda túp nusqadan arxivlendi. Qaraldı: 2-avgust 2021-jıl.
  23. Brown, Paul «State of the Union: npm». Linux.com (13-yanvar 2017-jıl). 2-avgust 2021-jılda túp nusqadan arxivlendi. Qaraldı: 2-avgust 2021-jıl.
  24. Branscombe, Mary «JavaScript Standard Moves to Yearly Release Schedule; Here is What's New for ES16». The New Stack (4-may 2016-jıl). 16-yanvar 2021-jılda túp nusqadan arxivlendi. Qaraldı: 15-yanvar 2021-jıl.
  25. «The TC39 Process». tc39.es. Ecma International. 7-fevral 2021-jılda túp nusqadan arxivlendi. Qaraldı: 15-yanvar 2021-jıl.
  26. «ECMAScript proposals». TC39. 4-dekabr 2020-jılda túp nusqadan arxivlendi. Qaraldı: 15-yanvar 2021-jıl.
  27. «U.S. Trademark Serial No. 75026640». uspto.gov. United States Patent and Trademark Office (6-may 1997-jıl). 13-iyul 2021-jılda túp nusqadan arxivlendi. Qaraldı: 8-may 2021-jıl.
  28. «Legal Notices». oracle.com. Oracle Corporation. 5-iyun 2021-jılda túp nusqadan arxivlendi. Qaraldı: 8-may 2021-jıl.
  29. "Oracle to buy Sun in $7.4-bn deal". The Economic Times. 21 April 2009. https://economictimes.indiatimes.com/tech/software/oracle-to-buy-sun-in-7-4-bn-deal/articleshow/4427747.cms. 
  30. Claburn, Thomas (17 September 2024). "Oracle urged again to give up JavaScript trademark". The Register. https://www.theregister.com/2024/09/17/oracle_urged_to_surrender_javascript_trademark/. 
  31. «Usage statistics of JavaScript libraries for websites». W3Techs. Qaraldı: 9-aprel 2021-jıl.
  32. «Using jQuery with Bootstrap». clouddevs.com (10-iyun 2019-jıl). Qaraldı: 17-mart 2024-jıl.
  33. «Vanilla JS». vanilla-js.com (16-iyun 2020-jıl). 16-iyun 2020-jılda túp nusqadan arxivlendi. Qaraldı: 17-iyun 2020-jıl.
  34. «Server-Side JavaScript Guide». oracle.com. Oracle Corporation (11-dekabr 1998-jıl). 11-mart 2021-jılda túp nusqadan arxivlendi. Qaraldı: 8-may 2021-jıl.
  35. Clinick, Andrew «Introducing JScript .NET». Microsoft Developer Network. Microsoft (14-iyul 2000-jıl). — „[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)“. 10-noyabr 2017-jılda túp nusqadan arxivlendi. Qaraldı: 10-aprel 2018-jıl.
  36. Mahemoff, Michael. «Server-Side JavaScript, Back with a Vengeance». readwrite.com (17-dekabr 2009-jıl). 17-iyun 2016-jılda túp nusqadan arxivlendi. Qaraldı: 16-iyul 2016-jıl.
  37. «JavaScript for Acrobat». adobe.com (7-avgust 2009-jıl). 7-avgust 2009-jılda túp nusqadan arxivlendi. Qaraldı: 18-avgust 2009-jıl.
  38. treitter «Answering the question: "How do I develop an app for GNOME?"». livejournal.com (2-fevral 2013-jıl). 11-fevral 2013-jılda túp nusqadan arxivlendi. Qaraldı: 7-fevral 2013-jıl.
  39. Ponge, Julien «Oracle Nashorn: A Next-Generation JavaScript Engine for the JVM». oracle.com. Oracle Corporation (19-aprel 2018-jıl). Qaraldı: 17-fevral 2025-jıl.
  40. «Migration Guide from Nashorn to GraalJS». graalvm.org. Qaraldı: 17-fevral 2025-jıl.
  41. «GraalJS». GraalVM. Qaraldı: 17-fevral 2025-jıl.
  42. «Java Interoperability». oracle.com. Oracle. Qaraldı: 17-fevral 2025-jıl.
  43. «Tessel 2... Leverage all the libraries of Node.JS to create useful devices in minutes with Tessel.». tessel.io. 26-may 2021-jılda túp nusqadan arxivlendi. Qaraldı: 8-may 2021-jıl.
  44. «Node.js Raspberry Pi GPIO Introduction». w3schools.com. 13-avgust 2021-jılda túp nusqadan arxivlendi. Qaraldı: 3-may 2020-jıl.
  45. «Espruino – JavaScript for Microcontrollers». espruino.com. 1-may 2020-jılda túp nusqadan arxivlendi. Qaraldı: 3-may 2020-jıl.
  46. «Concurrency model and Event Loop». Mozilla Developer Network. 5-sentyabr 2015-jılda túp nusqadan arxivlendi. Qaraldı: 28-avgust 2015-jıl.
  47. Flanagan, David. JavaScript: The Definitive Guide. O'Reilly Media, Inc., August 17, 2006 — 16 bet. ISBN 978-0-596-55447-7. 
  48. Korolev, Mikhail «JavaScript quirks in one image from the Internet» (en). The DEV Community (1-mart 2019-jıl). 28-oktyabr 2019-jılda túp nusqadan arxivlendi. Qaraldı: 28-oktyabr 2019-jıl.
  49. «Proposal-bigint/ADVANCED.md at master · tc39/Proposal-bigint». GitHub.
  50. Bernhardt, Gary «Wat». Destroy All Software (2012). 28-oktyabr 2019-jılda túp nusqadan arxivlendi. Qaraldı: 28-oktyabr 2019-jıl.
  51. «JavaScript data types and data structures». MDN (16-fevral 2017-jıl). 14-mart 2017-jılda túp nusqadan arxivlendi. Qaraldı: 24-fevral 2017-jıl.
  52. Crockford, Douglas «Prototypal Inheritance in JavaScript». 13-avgust 2013-jılda túp nusqadan arxivlendi. Qaraldı: 20-avgust 2013-jıl.
  53. «Inheritance and the prototype chain». Mozilla Developer Network. 25-aprel 2013-jılda túp nusqadan arxivlendi. Qaraldı: 6-aprel 2013-jıl.
  54. Herman, David. Effective JavaScript. Addison-Wesley, 2013 — 83 bet. ISBN 978-0-321-81218-6. 
  55. Ghandi, Raju. JavaScript Next. New York City: Apress Media, 2019 — 159–171 bet. ISBN 978-1-4842-5394-6. 
  56. Haverbeke, Marijn. Eloquent JavaScript, 4th (en), San Francisco: No Starch Press97–98 bet. ISBN 978-1-71850-411-0. 
  57. Katz, Yehuda «Understanding "Prototypes" in JavaScript» (12-avgust 2011-jıl). 5-aprel 2013-jılda túp nusqadan arxivlendi. Qaraldı: 6-aprel 2013-jıl.
  58. Herman, David. Effective JavaScript. Addison-Wesley, 2013 — 125–127 bet. ISBN 978-0-321-81218-6. 
  59. «Function – JavaScript» (en-US). MDN Web Docs. Qaraldı: 30-oktyabr 2021-jıl.
  60. «Properties of the Function Object». Es5.github.com. 28-yanvar 2013-jılda túp nusqadan arxivlendi. Qaraldı: 26-may 2013-jıl.
  61. The many talents of JavaScript for generalizing Role-Oriented Programming approaches like Traits and Mixins 2017-10-05 sánesinde Wayback Machine saytında arxivlendi., Peterseliger.blogspot.de, April 11, 2014.
  62. Traits for JavaScript 2014-07-24 sánesinde Wayback Machine saytında arxivlendi., 2010.
  63. «Home | CocktailJS». Cocktailjs.github.io. 4-fevral 2017-jılda túp nusqadan arxivlendi. Qaraldı: 24-fevral 2017-jıl.
  64. Croll, Angus «A fresh look at JavaScript Mixins». JavaScript, JavaScript… (31-may 2011-jıl). 15-aprel 2020-jılda túp nusqadan arxivlendi.
  65. «E4X – Archive of obsolete content». Mozilla Developer Network. Mozilla Foundation (14-fevral 2014-jıl). 24-iyul 2014-jılda túp nusqadan arxivlendi. Qaraldı: 13-iyul 2014-jıl.
  66. «var – JavaScript». The Mozilla Developer Network. 23-dekabr 2012-jılda túp nusqadan arxivlendi. Qaraldı: 22-dekabr 2012-jıl.
  67. «let». MDN web docs. Mozilla. 28-may 2019-jılda túp nusqadan arxivlendi. Qaraldı: 27-iyun 2018-jıl.
  68. «const». MDN web docs. Mozilla. 28-iyun 2018-jılda túp nusqadan arxivlendi. Qaraldı: 27-iyun 2018-jıl.
  69. «Making JavaScript Safe for Advertising». ADsafe. 6-iyul 2021-jılda túp nusqadan arxivlendi. Qaraldı: 8-may 2021-jıl.
  70. «Secure ECMA Script (SES)». 15-may 2013-jılda túp nusqadan arxivlendi. Qaraldı: 26-may 2013-jıl.
  71. «Google Caja Project». Google. 22-yanvar 2021-jılda túp nusqadan arxivlendi. Qaraldı: 9-iyul 2021-jıl.
  72. «Mozilla Cross-Site Scripting Vulnerability Reported and Fixed – MozillaZine Talkback». Mozillazine.org. 21-iyul 2011-jılda túp nusqadan arxivlendi. Qaraldı: 24-fevral 2017-jıl.
  73. Kottelin, Thor «Right-click "protection"? Forget about it». blog.anta.net (17-iyun 2008-jıl). 9-avgust 2011-jılda túp nusqadan arxivlendi. Qaraldı: 28-iyul 2022-jıl.
  74. Rehorik, Jan «Why You Should Never Put Sensitive Data in Your JavaScript». ServiceObjects Blog. ServiceObjects (29-noyabr 2016-jıl). 3-iyun 2019-jılda túp nusqadan arxivlendi. Qaraldı: 3-iyun 2019-jıl.
  75. Lauinger, Tobias; Chaabane, Abdelberi; Arshad, Sajjad; Robertson, William; Wilson, Christo; Kirda, Engin (December 21, 2016), „Thou Shalt Not Depend on Me: Analysing the Use of Outdated JavaScript Libraries on the Web“ (PDF), Northeastern University, arXiv:1811.00918, doi:10.14722/ndss.2017.23414, ISBN 978-1-891562-46-4, S2CID 17885720, 29 March 2017da túp nusqadan (PDF) arxivlendi, qaraldı: 28 July 2022
  76. Collins, Keith (March 27, 2016). "How one programmer broke the internet by deleting a tiny piece of code". Quartz. https://qz.com/646467/how-one-programmer-broke-the-internet-by-deleting-a-tiny-piece-of-code/. 
  77. SC Magazine UK, Developer's 11 lines of deleted code 'breaks the internet' Fevral 23, 2017[Sáne tuwrı kelmeydi], sánesinde Wayback Machine saytında arxivlendi.
  78. Mozilla Corporation, Buffer overflow in crypto.signText() 2014-06-04 sánesinde Wayback Machine saytında arxivlendi.
  79. Festa, Paul «Buffer-overflow bug in IE». CNET (19-avgust 1998-jıl). 25-dekabr 2002-jılda túp nusqadan arxivlendi.
  80. SecurityTracker.com, Apple Safari JavaScript Buffer Overflow Lets Remote Users Execute Arbitrary Code and HTTP Redirect Bug Lets Remote Users Access Files 2010-02-18 sánesinde Wayback Machine saytında arxivlendi.
  81. SecurityFocus, Microsoft WebViewFolderIcon ActiveX Control Buffer Overflow Vulnerability 2011-10-11 sánesinde Wayback Machine saytında arxivlendi.
  82. Fusion Authority, Macromedia Flash ActiveX Buffer Overflow Avgust 13, 2011[Sáne tuwrı kelmeydi], sánesinde Wayback Machine saytında arxivlendi.
  83. «Protected Mode in Vista IE7 – IEBlog». Blogs.msdn.com (9-fevral 2006-jıl). 23-yanvar 2010-jılda túp nusqadan arxivlendi. Qaraldı: 24-fevral 2017-jıl.
  84. US CERT, Vulnerability Note VU#713878: Microsoft Internet Explorer does not properly validate source of redirected frame 2009-10-30 sánesinde Wayback Machine saytında arxivlendi.
  85. Mozilla Foundation, Mozilla Foundation Security Advisory 2005–41: Privilege escalation via DOM property overrides 2014-06-04 sánesinde Wayback Machine saytında arxivlendi.
  86. Andersen, Starr «Part 5: Enhanced Browsing Security». Microsoft Docs (9-avgust 2004-jıl). Qaraldı: 20-oktyabr 2021-jıl.
  87. For one example of a rare JavaScript Trojan Horse, see Symantec Corporation, JS.Seeker.K 2011-09-13 sánesinde Wayback Machine saytında arxivlendi.
  88. Jean-Pharuns, Alix (July 30, 2015). "Rowhammer.js Is the Most Ingenious Hack I've Ever Seen". Motherboard (Vice). https://www.vice.com/en/article/rowhammerjs-is-the-most-ingenious-hack-ive-ever-seen/. 
  89. Goodin, Dan «DRAM 'Bitflipping' exploit for attacking PCs: Just add JavaScript». Ars Technica (4-avgust 2015-jıl). 27-yanvar 2018-jılda túp nusqadan arxivlendi. Qaraldı: 26-yanvar 2018-jıl.
  90. Auerbach, David «Rowhammer security exploit: Why a new security attack is truly terrifying». slate.com (28-iyul 2015-jıl). 30-iyul 2015-jılda túp nusqadan arxivlendi. Qaraldı: 29-iyul 2015-jıl.
  91. AnC 2017-03-16 sánesinde Wayback Machine saytında arxivlendi. VUSec, 2017
  92. New ASLR-busting JavaScript is about to make drive-by exploits much nastier 2017-03-16 sánesinde Wayback Machine saytında arxivlendi. Ars Technica, 2017
  93. Spectre Attack 2018-01-03 sánesinde Wayback Machine saytında arxivlendi. Spectre Attack
  94. «Benchmark.js». benchmarkjs.com. 19-dekabr 2016-jılda túp nusqadan arxivlendi. Qaraldı: 6-noyabr 2016-jıl.
  95. JSBEN.CH «JSBEN.CH Performance Benchmarking Playground for JavaScript». jsben.ch. 27-fevral 2021-jılda túp nusqadan arxivlendi. Qaraldı: 13-avgust 2021-jıl.
  96. Eich, Brendan «Popularity» (3-aprel 2008-jıl). 3-iyul 2011-jılda túp nusqadan arxivlendi. Qaraldı: 19-yanvar 2012-jıl.
  97. Ashkenas, Jeremy «List of languages that compile to JS». GitHub. 31-yanvar 2020-jılda túp nusqadan arxivlendi. Qaraldı: 6-fevral 2020-jıl.
  98. «Edge Browser Switches WebAssembly to 'On' -- Visual Studio Magazine». Visual Studio Magazine. 10-fevral 2018-jılda túp nusqadan arxivlendi. Qaraldı: 9-fevral 2018-jıl.
  99. «frequently asked questions». asm.js. 4-iyun 2014-jılda túp nusqadan arxivlendi. Qaraldı: 13-aprel 2014-jıl.