Inafasiriwa moja kwa moja kutoka kwa Wikipedia ya Kiingereza na Tafsiri ya Google

JavaScript

JavaScript ( / ɑː v ə ˌ s k r ɪ p t / [6] ), mara nyingi hufupishwa kama JS, ni kiwango cha juu cha , nguvu , weakly typed , mfano makao , mbalimbali dhana , na kufasiriwa lugha ya programu . Pamoja na HTML na CSS , JavaScript ni mojawapo ya teknolojia tatu za msingi za uzalishaji wa maudhui ya Ulimwengu Wote . Inatumiwa kufanya maingiliano ya wavuti na kuwasilisha programu za mtandaoni, ikiwa ni pamoja na michezo ya video. Wengi wa wavuti hutumia, na vivinjari vyote vya kisasa vya wavuti vinasaidia bila ya haja ya kuziba kwa njia ya injini iliyojengwa ya JavaScript . Kila moja ya injini nyingi za JavaScript zinawakilisha utekelezaji tofauti wa JavaScript, yote kulingana na vipimo vya ECMAS , na injini zingine hazisaidizi kikamilifu, na kwa injini nyingi zinajumuisha vipengele vya ziada zaidi ya ECMA.

JavaScript
Paradigm Mtazamo wa aina nyingi : kitu-kilichoelekezwa ( mfano-msingi ), muhimu , kazi , tukio linaloendeshwa [1]
Iliyoundwa na Brendan Eich
Msanidi programu Netscape Mawasiliano Corporation , Msingi wa Mozilla , Kimataifa ya Ecma
Kwanza ilionekana Desemba 4, 1995 ; Miaka 21 iliyopita ( 1995-12-04 ) [2]
Kuwezeshwa imara
ECMAScript 2017 [3] / Juni 2017 ; Miezi 5 iliyopita ( 2017-06 )
Kuandika nidhamu nguvu , bata
Upanuzi wa faili .js
Tovuti Mozilla
Utekelezaji mkubwa
V8 , JavaScriptCore , SpiderMonkey , Chakra
Inasababishwa na
Lua , Mpango , Perl , Self , Java , C , Python , AWK , HyperTalk
Imeathiriwa
ActionScript , AtScript , CoffeeScript , Dart , JScript .NET , LiveScript , Lengo-J , Opa , Perl 6 , QML , typescript
JavaScript
Ugani wa faili .js
Aina ya vyombo vya habari vya mtandao
  • application/javascript
  • text/javascript (kizamani) [4]
Kitambulisho cha Aina Sawa (UTI)

chanzo cha com.netscape.javascript

[5]
Aina ya muundo Lugha ya script

Kama lugha mbalimbali dhana, JavaScript inasaidia tukio inayotokana , kazi , na muhimu (ikiwa ni pamoja kitu-oriented na mfano makao ) programu mitindo . Ina API ya kufanya kazi na maandiko, safu , tarehe, maneno ya kawaida , na uendeshaji wa msingi wa DOM , lakini lugha yenyewe haijumuishi yoyote ya I / O , kama vile mitandao, kuhifadhi, au vifaa vya graphics, kutegemea haya juu ya mazingira ya jeshi ambayo imeingizwa.

Awali tu kutekelezwa upande wa mteja katika vivinjari vya wavuti, injini za JavaScript sasa zimeingizwa katika aina nyingine nyingi za programu ya mwenyeji, ikiwa ni pamoja na seva upande wa seva za wavuti na databases, na katika programu zisizo za wavuti kama vile wasindikaji wa neno na programu ya PDF , na wakati wa kukimbia mazingira ambayo hufanya JavaScript inapatikana kwa kuandika maombi ya simu na desktop, ikiwa ni pamoja na vilivyoandikwa vya desktop.

Ingawa kuna kufanana kwa nguvu nje kati ya JavaScript na Java, ikiwa ni pamoja na jina la lugha, syntax , na maktaba ya kiwango husika, lugha mbili ni tofauti na zina tofauti sana katika kubuni; JavaScript iliathiriwa na lugha za programu kama vile Self na Mpango . [7]

Yaliyomo

Historia

Mwanzoni katika Netscape

Mnamo mwaka 1993, Kituo cha Taifa cha Maombi ya Kuzuia (NCSA), kitengo cha Chuo Kikuu cha Illinois huko Urbana-Champaign , kilichotolewa NCSA Mosaic , kivinjari cha kwanza kilichojulikana kikubwa cha wavuti , ambacho kilikuwa na sehemu muhimu katika kupanua ukuaji wa dunia nzima Mtandao . Mwaka wa 1994, kampuni inayoitwa Mosaic Mawasiliano ilianzishwa katika Mountain View, California na iliajiri waandishi wengi wa awali wa NCSA Mosaic ili kuunda Mosaic Netscape . Hata hivyo, haukushiriki kikamilifu msimbo wowote na NCSA Mosaic. Codename ya ndani ya kivinjari cha kampuni hiyo ilikuwa Mozilla, ambayo ilikuwa imesimama kwa "Muuaji wa Musa", kama lengo la kampuni lilikuwa ni kuondoa NCSA Mosaic kama kivinjari cha nambari moja duniani. Toleo la kwanza la kivinjari cha wavuti, Mosaic Netscape 0.9, ilitolewa mwishoni mwa mwaka wa 1994. Miezi minne ilikuwa imechukua robo tatu ya soko la kivinjari na ikawa kivinjari kuu kwa mtandao katika miaka ya 1990. Ili kuepuka matatizo ya umiliki wa biashara na NCSA, kivinjari hicho kiliitwa jina la Netscape Navigator mwaka huo huo, na kampuni hiyo ikaitwa Netscape Communications.

Mawasiliano ya Netscape iligundua kuwa Mtandao unahitajika kuwa na nguvu zaidi. Marc Andreessen , mwanzilishi wa kampuni hiyo aliamini kuwa HTML inahitajika "lugha ya gundi" ambayo ilikuwa rahisi kutumia kwa wabunifu wa Mtandao na wajumbe wa muda wa muda kukusanya vipengele kama picha na madirisha, ambapo kanuni inaweza kuandikwa moja kwa moja kwenye ukurasa wa wavuti markup. Mwaka wa 1995, kampuni hiyo iliajiri Brendan Eich na lengo la kuingiza lugha ya programu ya Mpango katika Netscape Navigator yake. Kabla ya hakuweza kupata kuanza, Netscape Communications alishirikiana na Sun Microsystems kujumuisha katika zaidi tuli lugha ya programu Netscape Navigator Sun wa Java , ili kushindana na Microsoft kwa mtumiaji kupitishwa kwa teknolojia ya Tovuti na majukwaa. [8] Netscape Mawasiliano kisha aliamua kuwa lugha ya script ambayo walitaka kujenga ingekuwa inayosaidia Java na inapaswa kuwa na syntax sawa, ambayo iliondoa kupitisha lugha nyingine kama vile Perl , Python , TCL , au Scheme. Kutetea wazo la JavaScript dhidi ya mapendekezo ya ushindani, kampuni ilihitaji mfano. Eich aliandika moja katika siku 10, Mei 1995.

Ingawa ilitengenezwa chini ya jina la Mocha , lugha hiyo ilikuwa inaitwa rasmi LiveScript wakati itapelekwa kwanza kwenye beta releases ya Netscape Navigator 2.0 mnamo Septemba 1995, lakini ikaitwa JavaScript [2] wakati ilitumika katika Netscape Navigator 2.0 beta 3 katika Desemba. [9] Chaguo la mwisho la jina lilisababisha kuchanganyikiwa, kutoa hisia ya kuwa lugha ilikuwa ya kuepuka lugha ya programu ya Java, na uchaguzi umewekwa [ na nani? ] kama njia ya uuzaji na Netscape kutoa JavaScript kizuizi cha kile kilikuwa ni lugha mpya ya programu ya programu ya moto.

Kuna dhana ya kawaida ya kuwa JavaScript iliathiriwa na lugha ya awali ya ukurasa wa script ya Mtandao iliyoandaliwa na Nombas aitwaye C - (haipaswi kuchanganyikiwa na baadaye C - iliundwa mwaka 1997). [10] [11] Brendan Eich, hata hivyo, hajawahi kusikia C - kabla ya kuunda LiveScript. [12] Nombas iliweka scripting ya ukurasa wa Mtandao iliyoingia kwenye Netscape, ingawa scripting ya ukurasa wa wavuti haikuwa dhana mpya, kama ilivyoonyeshwa na kivinjari cha ViolaWWW . [13] Nombas baadaye ilibadili kutoa JavaScript badala ya C - katika bidhaa zao za ScriptEase na ilikuwa ni sehemu ya kikundi cha TC39 kilichowekwa rasmi kwa ECMAScript. [14]

Server upande JavaScript

Mnamo Desemba 1995, baada ya kutolewa kwa watumiaji wa JavaScript, Netscape ilianzisha utekelezaji wa lugha ya scripting ya seva na Netscape Enterprise Server . [15]

Tangu katikati ya miaka ya 2000, utekelezaji wa ziada wa seva wa JavaScript ulianzishwa, kama vile Node.js mwaka 2009. [16]

Kupitishwa kwa Microsoft

Teknolojia za script za Microsoft ikiwa ni pamoja na VBScript na JScript zilifunguliwa mwaka wa 1996. JScript, utekelezaji wa nyuma wa injini ya JavaScript ya Netscape, ilikuwa sehemu ya Internet Explorer 3 . JScript pia ilikuwa inapatikana kwa scripting ya seva kwenye Siri ya Taarifa ya Inthanethi . Internet Explorer 3 pia ilijumuisha msaada wa kwanza wa Microsoft kwa CSS na upanuzi mbalimbali kwa HTML, lakini kila kesi utekelezaji ulikuwa tofauti sana na ule uliopatikana katika Netscape Navigator wakati huo. [17] [18] Tofauti hizi kuwa vigumu kwa wabunifu na programmers kufanya moja tovuti ifanye kazi vizuri katika browsers wote, na hivyo kusababisha matumizi ya "bora kutazamwa katika Netscape" na "bora kutazamwa katika Internet Explorer" nembo kwamba sifa hizo mapema miaka ya vita vya kivinjari . [19] Javascript ilianza kupata sifa kwa kuwa moja ya barabara za barabara kwenye mtandao wa msalaba na Mtandao unaoendeshwa na viwango. Watengenezaji wengine walifanya kazi ngumu ya kujaribu kufanya maeneo yao kufanya kazi katika vivinjari vyote viwili, lakini wengi hawakuweza kupata muda. [17] Pamoja na kutolewa kwa Internet Explorer 4 , Microsoft ilianzisha dhana ya HTML Dynamic , lakini tofauti katika utekelezaji wa lugha na Models tofauti na proprietary Document Object bado na walikuwa vikwazo kwa kuenea kuchukua JavaScript kwenye Mtandao. [17]

viwango

Mnamo Novemba 1996, Netscape iliwasilisha JavaScript kwa Ecma Kimataifa ili kuficha vipimo vya kawaida, ambazo wengine wauzaji wa kivinjari wanaweza kutekeleza kulingana na kazi iliyofanyika Netscape. Hii ilisababisha kutolewa rasmi kwa lugha ya ECMAScript iliyochapishwa katika toleo la kwanza la kiwango cha ECMA-262 mnamo Juni 1997, na JavaScript ndiyo inayojulikana zaidi ya utekelezaji. ActionScript na JScript ni utekelezaji mzuri wa ECMAScript.

Mchakato wa viwango uliendelea katika mzunguko, na kutolewa kwa ECMAScript 2 mwezi Juni 1998, ambayo huleta marekebisho kadhaa kufuatana na kiwango cha Kimataifa cha ISO / IEC 16262. Kutolewa kwa ECMAScript 3 ikifuatiwa Desemba 1999, ambayo ni msingi wa kisasa kisasa JavaScript. Kazi ya awali ya ECMAScript 4 inayoongozwa na Waldemar Horwat (kisha Netscape, sasa kwenye Google ) ilianza mwaka 2000 na kwa mara ya kwanza, Microsoft ilionekana kushiriki na hata kutekeleza baadhi ya mapendekezo katika lugha yao ya JScript .NET .

Baada ya muda ilikuwa wazi ingawa Microsoft hakuwa na nia ya kushirikiana au kutekeleza JavaScript sahihi katika Internet Explorer, hata ingawa hakuwa na pendekezo la kushindana na walikuwa na sehemu ya sehemu (na kugeuka kwa hatua hii) upande wa seva wa NET . Kwa hiyo mwaka wa 2003, kazi ya awali ya ECMAScript 4 ilikuwa imetumwa.

Tukio kubwa la pili lilikuwa mwaka 2005, na matukio mawili makubwa katika historia ya Javascript. Kwanza, Brendan Eich na Mozilla walijiunga na Ecma International kama mwanachama asiye na faida na kazi ilianza kwenye ECMAScript kwa XML (E4X), kiwango cha ECMA-357, kilichotoka kwa wafanyakazi wa zamani wa Microsoft katika BEA Systems (awali alipewa kama Crossgain) . Hii ilisababisha kufanya kazi kwa pamoja na Macromedia (baadaye iliyopatikana na Adobe Systems ), ambao walikuwa kutekeleza E4X katika ActionScript 3 (ActionScript 3 ilikuwa uma ya ECMAScript ya awali 4).

Hivyo, pamoja na Macromedia, kazi ilianza tena juu ya ECMAScript 4 kwa lengo la kuimarisha kilichokuwa katika ActionScript 3. Ili kufikia mwisho huu, Adobe Systems ilitoa Kiwango cha Virtual ActionScript 2, jina lake Tamarin , kama mradi wa chanzo wazi . Lakini Tamarin na ActionScript 3 walikuwa tofauti sana na mtandao wa JavaScript kugeuka, kama ilivyotambuliwa na vyama mwaka 2007 na 2008.

Ole, kulikuwa na hofu kati ya wachezaji mbalimbali; Douglas Crockford - jiza kwenye Yahoo! Vikosi vilivyoshirikishwa na Microsoft mwaka 2007 kupinga ECMAScript 4, ambayo imesababisha jitihada za ECMAScript 3.1. Uendelezaji wa ECMAScript 4 haujawahi kumalizika, lakini kazi hiyo iliathiri matoleo yafuatayo. [20]

Wakati yote haya yalikuwa yanatokea, jumuiya ya wazi na waendelezaji iliweka kazi ili kurekebisha kile kinachoweza kufanyika kwa JavaScript. Jitihada hii ya jumuiya ilianzishwa mwaka wa 2005 wakati Jesse James Garrett alipotoa karatasi nyeupe ambako aliunda jina Ajax , na alielezea seti ya teknolojia, ambazo JavaScript ilikuwa ni mgongo, uliotumiwa kuunda maombi ya mtandao ambapo data inaweza kupakiwa nyuma , kuepuka haja ya reloads kamili ya ukurasa na kuongoza kwa maombi zaidi ya nguvu. Hii ilisababisha kipindi cha kuzaliwa upya kwa matumizi ya Javascript inayoongozwa na maktaba ya chanzo wazi na jumuiya ambazo ziliunda karibu nao, na maktaba kama vile Programu , jQuery , Dojo Toolkit , MooTools , na wengine kutolewa.

Mnamo Julai 2008, vyama vyenye tofauti vilivyounganishwa huko Oslo. Hii imesababisha makubaliano ya mwisho mapema mwaka 2009 ili kurejea ECMAScript 3.1 na ECMAScript 5 na kuendesha lugha mbele kwa kutumia ajenda inayojulikana kama Harmony. ECMAScript 5 hatimaye ilitolewa Desemba 2009.

Mnamo Juni 2011, ECMAScript 5.1 ilitolewa kufanana kabisa na toleo la tatu la kiwango cha Kimataifa cha ISO / IEC 16262. ECMAScript 2015 ilitolewa mwezi Juni 2015. ECMAScript 2016 ilitolewa mwezi Juni 2016. Toleo la sasa ni ECMAScript 2017, iliyotolewa mwezi Juni 2017. [21]

Baadaye maendeleo

Javascript imekuwa mojawapo ya lugha maarufu zaidi za programu kwenye Mtandao. Awali, hata hivyo, waandaaji wengi wa kitaaluma waliharibu lugha kwa sababu, kwa sababu nyingine, wasikilizaji walengwa walikuwa waandishi wa Mtandao na wengine "amateurs" kama hayo. [22] Ujio wa Ajax ulirudi JavaScript kwa uangalizi na umeleta makini zaidi ya programu ya kitaaluma. Matokeo yake ni kuenea kwa mifumo ya kina na maktaba , kuboresha mazoea ya programu ya JavaScript, na matumizi makubwa ya watumiaji wa wavuti wa Nje ya Java, kama inavyoonekana na kuenea kwa majukwaa ya JavaScript ya upande wa seva .

Mnamo Januari 2009, mradi wa CommonJS ulianzishwa kwa lengo la kutaja maktaba ya kawaida ya kawaida hasa kwa maendeleo ya JavaScript nje ya kivinjari. [23]

Kwa kuongezeka kwa maombi ya ukurasa mmoja na tovuti za Javascript-nzito, inazidi kutumiwa kama lengo la kukusanya kwa washirika wa chanzo-kwa-chanzo kutoka kwa lugha zote mbili na lugha za static .

Lebo ya biashara

"JavaScript" ni alama ya biashara ya Oracle Corporation nchini Marekani. [24] Inatumiwa chini ya leseni ya teknolojia iliyozalishwa na kutekelezwa na Netscape Communications na vyombo vya sasa kama Foundation ya Mozilla . [25]

Vanilla JavaScript

Vigezo vya Vanilla JavaScript na Vanilla JS vinataja JavaScript haipatikani na mifumo yoyote au maktaba ya ziada. Maandiko yaliyoandikwa katika Vanilla JS ni code ya JavaScript wazi. [ citation inahitajika ]

Vipengele

Makala yafuatayo ni ya kawaida kwa utekelezaji wote wa utekelezaji wa ECMascript, isipokuwa waziwazi vinginevyo.

Usaidizi wa Universal wa

Vinjari vyote vya kisasa vya wavuti vinaunga mkono JavaScript na wakalimani waliojenga.

Imperative na muundo

Javascript inasaidia mengi ya syntax ya programu iliyopangwa kutoka kwa C (kwa mfano, kama kauli, wakati wa matanzi, kubadili kauli, kufanya wakati wa matanzi, nk). Mbali moja ya ubaguzi ni scoping : JavaScript awali alikuwa na kazi tu scoping na var . ECMAScript 2015 aliongeza maneno muhimu basi na kub kwa kuzuia scoping, maana JavaScript sasa ina kazi zote na kuzuia scoping. Kama C, JavaScript inafanya tofauti kati ya maneno na taarifa . Tofauti moja ya maandishi kutoka kwa C ni moja kwa moja ya kuingizwa kwa semicoloni , ambayo inaruhusu semicolons ambazo zinaweza kukamilisha kauli kufutwa. [26]

Dynamic

Kuchapa
Kama ilivyo na lugha nyingi za script , Javascript ni typed typed ; aina inahusishwa na kila thamani , badala ya kila kujieleza. Kwa mfano, kutofautiana kwa wakati mmoja unaoingia kwa namba inaweza baadaye kufungwa tena kwenye kamba . [27] Javascript inasaidia njia mbalimbali za kupima aina ya kitu, ikiwa ni pamoja na kuandika bata . [28]
Tathmini ya wakati wa kukimbia
Javascript ni pamoja na kazi ya eval ambayo inaweza kutekeleza taarifa iliyotolewa kama masharti wakati wa kukimbia.

Mfano-msingi (kitu-oriented)

JavaScript iko karibu kabisa na kitu-msingi . Katika JavaScript, kitu ni safu ya ushirika , imeongezwa kwa mfano (angalia chini); Kitufe cha kila kamba hutoa jina kwa mali ya kitu, na kuna njia mbili za kupatanisha za kutaja jina kama: notation dot ( obj.x = 10 ) na notation ya bracket ( obj ['x'] = 10 ). Mali inaweza kuongezwa, kupunguzwa, au kufutwa wakati wa kukimbia. Mali nyingi za kitu (na mali yoyote ambayo ni ya mlolongo wa urithi wa kitu) inaweza kuhesabiwa kwa kutumia ... kwa kitanzi.

JavaScript ina idadi ndogo ya vitu vilivyojengwa, ikiwa ni pamoja na Kazi na Tarehe .

Vitendo
Javascript hutumia maonyesho ambako lugha nyingi zinazoelekezwa na vitu hutumia madarasa ya urithi . [29] Inawezekana kuiga sifa nyingi za darasa na prototype katika JavaScript. [30]
Kazi kama wajenzi wa vitu
Kazi mara mbili kama wajenzi wa vitu, pamoja na jukumu lao la kawaida. Kuahirisha kazi ya simu na mpya itaunda mfano wa mfano, mali ya kurithi na mbinu kutoka kwa mtengenezaji (ikiwa ni pamoja na mali kutoka kwa mfano wa Kitu ). [31] ECMAScript 5 inatoa njia ya Object.create , kuruhusu viumbe wazi ya mfano bila ya kujitegemea kurithi kutoka mfano Object (mazingira ya zamani inaweza hawawajui mfano kwa null ). [32] Mali ya mfano wa mtengenezaji huamua kitu kilichotumiwa kwa mfano wa ndani wa kitu kipya. Mbinu mpya zinaweza kuongezwa kwa kurekebisha mfano wa kazi inayotumiwa kama mtengenezaji. Wajenzi wa Javascript wa kujengwa, kama Array au Kitu , pia wana prototypes ambazo zinaweza kubadilishwa. Ingawa inawezekana kurekebisha mfano wa Kitu , kwa kawaida huchukuliwa kuwa ni mazoea mabaya kwa sababu vitu vingi vya JavaScript vinarithi mbinu na mali kutoka kwa mfano wa Kitu , na huenda hawakutarajia mfano huo urekebishwe. [33]
Kazi kama mbinu
Tofauti na lugha nyingi zinazoelekezwa na kitu, hakuna tofauti kati ya ufafanuzi wa kazi na ufafanuzi wa mbinu . Badala yake, tofauti hutokea wakati wa wito wa kazi; wakati kazi inaitwa kama njia ya kitu, kazi ya ndani ya neno hili muhimu linapatikana kwa kitu hicho kwa kuomba hiyo.

Kazi

Kazi ni darasa la kwanza ; kazi inachukuliwa kuwa kitu. Kwa hiyo, kazi inaweza kuwa na mali na mbinu, kama vile .call () na .bind () . [34] Kazi ya kiota ni kazi iliyoelezwa ndani ya kazi nyingine. Inaloundwa kila wakati kazi ya nje inakaribishwa. Aidha, kila kazi ya kiota hufanya kufungwa kwa lexical : Upeo wa lexical wa kazi ya nje (ikiwa ni pamoja na thamani yoyote ya kawaida, ya ndani, au hoja) inakuwa sehemu ya hali ya ndani ya kila kitu cha ndani ya kazi, hata baada ya kutekelezwa kwa kazi ya nje . [35] JavaScript pia inasaidia kazi zisizojulikana .

Delegative

JavaScript inasaidia thabiti na wazi ujumbe .

Kazi kama majukumu (Makala na Mixins)
JavaScript inasaidia utekelezaji wa kazi mbalimbali za Mfumo wa Wajibu [36] kama Makala [37] [38] na Mixins . [39] Kazi kama hiyo inafafanua tabia ya ziada kwa angalau njia moja inayohusiana na neno hili muhimu katika mwili wa kazi yake. Hukumu hiyo inapaswa kuhamishwa wazi kwa njia ya wito au kuomba kwa vitu ambavyo vinahitaji kutaja tabia ya ziada ambayo haijashirikiwa kupitia mlolongo wa mfano.
Uundwaji wa vitu na urithi
Ingawa ujumbe unaojulikana kwa kazi unajumuisha utungaji katika Javascript, ujumbe uliofanyika tayari hutokea kila wakati mlolongo wa mfano unatembea ili, kwa mfano, upate njia ambayo inaweza kuwa na uhusiano lakini haujatokana na kitu. Mara baada ya njia hiyo inapatikana inapata kuitwa ndani ya mazingira ya kitu hiki. Kwa hiyo urithi katika JavaScript unafunikwa na automatism ya ujumbe ambayo inahusiana na mali ya mfano wa kazi za ujenzi.

Miscellaneous

Hali ya wakati wa kukimbia
Javascript kawaida hutegemea mazingira ya wakati wa kukimbia (kwa mfano, kivinjari cha wavuti ) ili kutoa vitu na mbinu ambazo scripts zinaweza kuingiliana na mazingira (kwa mfano, ukurasa wa DOM wa wavuti). Pia hutegemea mazingira ya wakati wa kukimbia kutoa uwezo wa kuingiza / kuagiza maandiko (kwa mfano, HTML <script> vipengele). Huu sio kipengele cha lugha kwa se, lakini ni kawaida katika utekelezaji wengi wa JavaScript.
JavaScript inachukua ujumbe kutoka foleni moja kwa wakati. Baada ya kupakia ujumbe mpya, Javascript inaita kazi inayohusishwa na ujumbe huo, ambayo inajenga sura ya stack ya wito ( hoja za kazi na vigezo vya ndani ). Stack ya wito hupungua na inakua kulingana na mahitaji ya kazi. Baada ya kukamilika kwa kazi, wakati stack haina tupu, JavaScript inakuja ujumbe unaofuata katika foleni. Hii inaitwa kitanzi cha tukio , kilichoelezwa kama "kukimbia hadi kukamilika" kwa sababu kila ujumbe hutatuliwa kikamilifu kabla ya ujumbe ujao kuchukuliwa. Hata hivyo, mtindo wa concurrency wa lugha unaelezea kitanzi cha tukio kama sio kizuizi : pembejeo ya mpango / pato hufanyika kwa kutumia matukio na kazi za kurudi . Hii ina maana, kwa mfano, kwamba JavaScript inaweza mchakato wa mouse wakati unasubiri swala la database ili kurudi habari. [40]
Variadic kazi
Nambari isiyo na kipimo ya vigezo inaweza kupitishwa kwenye kazi. Kazi inaweza kuwafikia kupitia vigezo rasmi na pia kwa njia ya hoja za mitaa. Variadic kazi pia inaweza kuundwa kwa kutumia njia ya kumfunga .
Safu na kitu halisi
Kama lugha nyingi za script, safu na vitu (vitu vinavyoshirikiana kwa lugha zingine) kila mmoja huweza kuundwa kwa syntax ya mkato wa mkato. Kwa kweli, hizi halisi hufanya msingi wa muundo wa data wa JSON .
Maneno ya kawaida
Javascript pia inasaidia maneno ya kawaida kwa namna inayofanana na Perl , ambayo hutoa syntax ya ufupi na yenye nguvu ya uharibifu wa maandishi ambayo ni ya kisasa kuliko kazi za kamba iliyojengwa. [41]

Upanuzi maalum wa muuzaji

Javascript inasimamiwa rasmi na Foundation ya Mozilla , na vipengele vya lugha mpya huongezwa mara kwa mara. Hata hivyo, injini tu za JavaScript zinasaidia makala hizi mpya:

  • kazi ya getter na kazi ya kuweka (iliyoungwa mkono na WebKit, Gecko, Opera, [42] ActionScript, na Rhino) [43]
  • kifungu cha masharti ya kukamata
  • itifaki ya iterator (iliyopitishwa kutoka Python )
  • jenereta duni - coroutines (iliyopitishwa kutoka Python)
  • ufahamu wa safu na maneno ya jenereta (iliyopitishwa kutoka Python)
  • sahihi ya kuzuia wigo kupitia hebu keyword
  • safu na uharibifu wa kitu (aina ndogo ya muundo unaofanana )
  • Maneno mafupi ya kazi ( kazi (args) expr )
  • ECMAScript kwa XML (E4X), ugani unaongeza usaidizi wa asili wa XML kwa ECMAScript (haitumiki katika Firefox tangu toleo la 21 [44] )

Syntax

Mifano rahisi

Vigezo katika JavaScript unaweza kuelezwa kwa kutumia var keyword: [45]

var x ; // hufafanua x variable na huipa thamani maalum "isiyojulikana" (si kuchanganyikiwa na thamani isiyojulikana)
var y = 2 ; // hufafanua y variable na kuipa thamani 2
var z = "Hello, Dunia!" ; // hufafanua z variable na huiweka kamba yenye kichwa "Hello, Dunia!"

Kumbuka maoni katika mfano hapo juu, wote wawili ambao walitangulia na slashes mbili mbele .

Hakuna utendaji wa I / O uliojengwa katika JavaScript; mazingira ya wakati wa kukimbia hutoa hiyo. Maagizo ya ECMAS katika toleo la 5.1 linasema: [46]

... kwa kweli, hakuna masharti katika maelezo haya ya pembejeo ya data ya nje au matokeo ya matokeo ya computed.

Hata hivyo, mazingira mengi ya kukimbia yana kitu cha console [47] ambacho kinaweza kutumika kuchapisha pato. Hapa ni mpango mdogo wa Hello World katika JavaScript :

console . logi ( "Hello World!" );

Kazi rahisi ya kurudia :

kazi factorial ( n ) {
    ikiwa ( n === 0 || n === 1 ) {
        kurudi 1 ; // 0! = 1! = 1
    }
    kurudi n * factorial ( n - 1 );
}

factorial ( 3 ); // anarudi 6

Kazi isiyojulikana (au lambda):

kazi counter () {
    var count = 0 ;
    kurudi kazi () {
        kurudi + + hesabu ;
    };
}

var kufungwa = counter ();
kufungwa (); // anarudi 1
kufungwa (); // anarudi 2
kufungwa (); // anarudi 3

Mfano huu unaonyesha kuwa, kwa JavaScript, kufungwa kazi kunachukua vigezo vyao vya ndani bila kutafakari .

Katika JavaScript, vitu vinaundwa kwa njia sawa na kazi, hii inajulikana kama kitu cha kazi .

Mfano wa kitu:

kazi mpira ( r ) {
    hii . radius = r ; // variable ya radius ni ya ndani kwa kitu cha mpira
    hii . eneo = pi * r ** 2 ;
    hii . kuonyesha = kazi () { // vitu vinaweza kuwa na kazi
        FunguaCircle ( r ); // inaonyesha kazi ya kuchora duru
    }
}
myBall = mpira mpya ( 5 ); // inaunda mfano mpya wa kitu cha mpira na radius 5
myBall . onyesha (); // mfano huu wa kitu cha mpira una kazi ya kuonyesha inayofanyika

Variadic kazi maandamano ( hoja ni variable maalum): [48]

kazi ya jumla () {
    var x = 0 ;
    kwa ( var i = 0 ; i < hoja . urefu ; ++ i ) {
        x + = hoja [ i ];
    }
    kurudi x ;
}
jumla ( 1 , 2 ); // anarudi 3
jumla ( 1 , 2 , 3 ); // anarudi 6

Maneno ya kazi ya mara kwa mara hutumiwa kutengeneza modules, kama kabla ya ECMAScript 2015 haikujengwa katika kujenga kwa lugha. Modules inaruhusu kukusanya mali na mbinu katika orodha ya majina na kuifanya baadhi ya watu binafsi:

var counter = ( kazi () {
    var i = 0 ; // mali binafsi

    kurudi { // mbinu za umma
        kupata : kazi () {
            tahadhari ( i );
        },
        Weka : kazi ( thamani ) {
            i = thamani ;
        },
        Kiwango : kazi () {
            tahadhari ( + + i );
        }
    };
}) (); // moduli

kukabiliana . kupata (); // inaonyesha 0
kukabiliana . kuweka ( 6 );
kukabiliana . upungufu (); // inaonyesha 7
kukabiliana . upungufu (); // inaonyesha 8

Mfano wa juu zaidi

Msimbo huu wa sampuli huonyesha vipengele mbalimbali vya JavaScript.

/ * Hupata nyingi nyingi za kawaida (LCM) za namba mbili * /
kazi LCMCalculator(x, y) { // kazi ya wajenzivar Angalia = kazi(x) { // kazi ya ndanikama (x % 1 ! == 0) {kutupa mpya Aina ya Uharibifu(x + "sio integer"); // var = = mouseX};kurudi x}hii.a = Angalia(x)// semicolons ^^^^ ni chaguo, newline ni ya kutoshahii.b = Angalia(y);

}
// mfano wa matukio ya kitu yaliyoundwa na mtengenezaji ni
// kwamba mali "mfano" wa majengo.
LCMCalculator.mfano = { // kitu halisimtengenezaji: LCMCalculator, // wakati upya mfano, kuweka mali ya mtengenezaji ipasavyogcd: kazi() { // njia ambayo huhesabu mshauri mkuu wa kawaida// Euclidean algorithm:var a = Math.abs(hii.a),b = Math.abs(hii.b),t;kama (a < b) {// swap vigezot = b;b = a;a = t;}wakati (b ! == 0) {t = b;b = a % b;a = t;}// Tu haja ya kuhesabu GCD mara moja, hivyo "redefine" njia hii.// (Kwa kweli sio ufafanuzi-inaelezwa juu ya tukio hilo,// hivyo kwamba hii.gcd inahusu hii "ufafanuzi" badala ya LCMCalculator.prototype.gcd.// Kumbuka kuwa hii inasababisha matokeo mabaya ikiwa wanachama wa LCMCalculator "a" na / au "b" hubadilishwa baadaye.)// Pia, 'gcd' === "gcd", hii ['gcd'] === hii.gcdhii['gcd'] = kazi() {kurudi a;};kurudi a;},Majina ya mali ya vitu yanaweza kutajwa na masharti yaliyopangwa na quotes mbili (") au moja (').lcm: kazi() {// Majina yanayobadilishana haipatikani na vitu vya kitu, kwa mfano, | lcm | sio | hii.lcm |.// si kutumia | hii.a * hii.b | ili kuepuka maswala ya usahihi wa FPvar lcm = hii.a / hii.gcd() * hii.b;// Tu haja ya kuhesabu lcm mara moja, hivyo "redefine" njia hii.hii.lcm = kazi() {kurudi lcm;};kurudi lcm;},Kushusha: kazi() {kurudi "LCMCalculator: a =" + hii.a + ", b =" + hii.b;}
};

// Define kazi ya uzalishaji wa generic; utekelezaji huu unatumika tu kwa wavuti wa wavuti
kazi pato(x) {hati.mwili.appendChild(hati.UndaTextNode(x));hati.mwili.appendChild(hati.tengenezaElement('br'));
}

// Kumbuka: ramani ya safu () na kwaEach () huelezwa katika JavaScript 1.6.
// Wao hutumika hapa kuonyesha JavaScript ya asili ya kazi ya asili.
[[25, 55],[21, 56],[22, 58],[28, 56]
].ramani(kazi(jozi) { // safu halisi ya ramani ya kazikurudi mpya LCMCalculator(jozi[0], jozi[1]);}).fanya((a, b) => a.lcm() - b.lcm()) // fanya na kazi hii ya kulinganisha; => ni aina fupi ya kazi, inayoitwa "mshale wa kazi".kwa kila(Kuchapisha);

kazi Kuchapisha(kinyume) {pato(kinyume + ", gcd =" + kinyume.gcd() + ", lcm =" + kinyume.lcm());
}

Pato zifuatazo zinapaswa kuonyeshwa kwenye dirisha la kivinjari.

LCMCalculator: a = 28, b = 56, gcd = 28, lcm = 56
LCMCalculator: a = 21, b = 56, gcd = 7, lcm = 168
LCMCalculator: a = 25, b = 55, gcd = 5, lcm = 275
LCMCalculator: a = 22, b = 58, gcd = 2, lcm = 638

Tumia katika kurasa za Wavuti

Kufikia mwezi wa Mei 2017 94.5% ya kurasa za milioni 10 zilizo maarufu zaidi zinazotumia JavaScript. [49] Matumizi ya kawaida ya JavaScript ni kuongeza tabia ya upande wa mteja kwa HTML kurasa, pia inajulikana kama Dynamic HTML (DHTML). Maandiko yanaingizwa ndani au yanajumuishwa kutoka kurasa za HTML na kuingiliana na Mfano wa Kitu cha Hati (DOM) cha ukurasa. Baadhi ya mifano rahisi ya matumizi haya ni:

  • Inapakia maudhui ya ukurasa mpya au kuwasilisha data kwenye seva kupitia Ajax bila kupakia upya ukurasa (kwa mfano, mtandao wa kijamii unaweza kuruhusu mtumiaji kusasisha sasisho la hali bila kuacha ukurasa).
  • Uhuishaji wa vipengele vya ukurasa, unawaangamiza ndani na nje, kurekebisha yao, kuwahamasisha, nk.
  • Maudhui maingiliano, kwa mfano michezo, na kucheza sauti na video.
  • Inathibitisha maadili ya pembejeo ya fomu ya Mtandao ili kuhakikisha kuwa yanakubaliwa kabla ya kuwasilishwa kwa seva.
  • Inatumia habari kuhusu tabia za usomaji na shughuli za kuvinjari kwenye tovuti mbalimbali. Kurasa za wavuti hufanya hivyo kwa uchambuzi wa wavuti , kufuatilia matangazo , utambulisho au madhumuni mengine. [50]

Kwa sababu javascript ya Javascript inaweza kukimbia ndani ya kivinjari cha mtumiaji (badala ya seva ya kijijini), kivinjari anaweza kujibu hatua za mtumiaji haraka, na kuifanya maombi kuwa msikivu zaidi. Aidha, msimbo wa Javascript unaweza kuchunguza vitendo vya mtumiaji ambavyo HTML peke yake haiwezi, kama vile vipindi vya kibinafsi. Maombi kama vile Gmail yanafaidika na hili: mengi ya mantiki ya ushuhuda ya mtumiaji imeandikwa kwa JavaScript, na maombi ya mawasilisho ya JavaScript ya habari (kama vile maudhui ya ujumbe wa barua pepe) kwenye seva. Mwelekeo mkubwa wa programu za Ajax pia hutumia nguvu hii.

Jedwali la JavaScript (pia linajulikana kama mkalimani wa Javascript au utekelezaji wa JavaScript) ni mkalimani ambao hutafsiri msimbo wa chanzo cha Javascript na hufanya script ipasavyo. Injini ya kwanza ya JavaScript iliundwa na Brendan Eich kwenye Netscape, kwa kivinjari cha wavuti wa Netscape Navigator. Injini, jina la SpiderMonkey inayoitwa code , inatekelezwa katika C. Imekuwa imesasishwa (katika Javascript 1.5) ili kuendana na ECMAScript 3. Injini ya Rhino , iliyoundwa na Norris Boyd (zamani huko Netscape, sasa kwenye Google) ni utekelezaji wa JavaScript katika Java . Rhino, kama SpiderMonkey, ni ECMAScript 3 inayokubaliana.

Kivinjari cha wavuti ni mazingira ya kawaida zaidi ya jeshi kwa JavaScript. Vivinjari vya wavuti kawaida huunda "vitu vya jeshi" ili kuwakilisha DOM katika JavaScript. Seva ya Mtandao ni mazingira mengine ya kawaida ya mwenyeji. Seva ya Wavuti ya JavaScript ingekuwa wazi vitu vyenye jeshi vinavyolingana ombi la HTTP na vitu vya majibu, ambayo programu ya JavaScript inaweza kisha kuuliza na kuendesha ili kuzalisha kurasa za Mtandao kwa nguvu.

Kwa kuwa JavaScript ni lugha pekee ambayo browsers maarufu zaidi hushiriki msaada, imekuwa lugha ya lengo kwa mifumo mingi katika lugha zingine, ingawa Javascript haijawahi kutengwa kuwa lugha hiyo. [51] Pamoja na mapungufu ya utendaji yanayotokana na hali yake ya nguvu, kasi ya kuongezeka kwa injini za Javascript imefanya lugha kuwa lengo linalowezekana la kukusanya.

Mfano wa script

Chini ni mfano mdogo wa ukurasa wa Mtandao unaoendana na viwango una JavaScript (kwa kutumia HTML 5 syntax) na DOM:

<! DOCTYPE html>
< html >
  < kichwa >
    < title > Mfano </ title >
  </ kichwa >
  < mwili >
    < kifungo id = "hellobutton" > Hello </ button >
    < script >
        hati . GetElementById ( 'hellobutton' ). onclick = kazi () {
            tazama ( 'Hello dunia!' ); // Onyesha mazungumzo
            var myTextNode = hati . kujengaTextNode ( 'Baadhi ya maneno mapya.' );
            hati . mwili . appendChild ( myTextNode ); // Weka "Baadhi ya maneno mapya" kwenye ukurasa
        };
    </ script >
  </ mwili >
</ html >

Matumizi ya utangamano

Kwa sababu Javascript anaendesha mazingira tofauti sana, sehemu muhimu ya kupima na kufuta upya ni kupima na kuthibitisha kuwa Javascript inafanya kazi katika browsers nyingi.

Mipangilio ya DOM ya kurasa za kurasa za wavuti si sehemu ya kiwango cha ECMAScript, au cha JavaScript yenyewe. Rasmi, interfaces za DOM hufafanuliwa na jitihada tofauti za kusimamishwa na W3C ; kwa mazoezi, utekelezaji wa kivinjari unatofautiana na viwango na kutoka kwa kila mmoja, na sio wote browsers kutekeleza JavaScript.

Ili kukabiliana na tofauti hizi, waandishi wa JavaScript wanaweza kujaribu kujaribu kuandika kanuni zinazopendana na viwango ambazo zitafanyika pia kwa usahihi na vivinjari vingi; bila kushindwa, wanaweza kuandika kificho ambacho kinachunguza uwepo wa vipengele fulani vya kivinjari na hufanyika tofauti ikiwa haipatikani. [52] Katika baadhi ya matukio, browsers mbili zinaweza kutekeleza kipengele lakini kwa tabia tofauti, na waandishi wanaweza kuona kuwa ni vitendo kuchunguza kivinjari kikiendesha na kubadilisha tabia zao za script kufanana. [53] [54] Wachunguzi wanaweza pia kutumia maktaba au zana ambazo zinachukua tofauti za kivinjari kuwa akaunti.

Zaidi ya hayo, scripts haiwezi kufanya kazi kwa watumiaji wengine. Kwa mfano, mtumiaji anaweza:

  • tumia kivinjari cha zamani au chache na msaada usio kamili au wa kawaida wa DOM;
  • tumia PDA au kivinjari cha simu ya mkononi ambacho hawezi kutekeleza JavaScript;
  • Jitihada za JavaScript zimezimwa kama tahadhari ya usalama;
  • tumia kivinjari cha hotuba kutokana na, kwa mfano, ulemavu wa kuona.

Ili kuunga mkono watumiaji hawa, waandishi wa wavuti wanaweza kujaribu kuunda kurasa ambazo zinaharibu kwa neema juu ya mawakala wa watumiaji (browsers) ambao hawana mkono JavaScript ya ukurasa. Hasa, ukurasa unapaswa kuendelea kubakiwa bila ya sifa ambazo JavaScript ingeongeza. Tovuti fulani hutumia lebo ya <<scripts> HTML, ambayo ina maudhui ya juu ikiwa JS imezimwa. Njia mbadala ambayo wengi hupata kupendekezwa ni maudhui ya mwandishi wa kwanza kutumia teknolojia ya msingi inayofanya kazi katika vivinjari vyote, kisha kuboresha maudhui kwa watumiaji ambao wanawezeshwa na Javascript. Hii inajulikana kama kukuza maendeleo .

Usalama

JavaScript na DOM hutoa uwezekano wa waandishi mabaya kutoa script ili kukimbia kwenye kompyuta ya mteja kupitia Mtandao. Waandishi wa kivinjari wana hatari hii kwa kutumia vikwazo viwili. Kwanza, scripts zinaendeshwa kwenye sanduku ambalo zinaweza tu kufanya vitendo vinavyohusiana na Mtandao, sio kazi za programu za jumla kama vile kujenga faili. Pili, scripts zinakabiliwa na sera ya asili ya asili : scripts kutoka kwenye Tovuti moja hawana upatikanaji wa taarifa kama vile majina ya watumiaji, manenosiri, au vidakuzi vinavyotumwa kwenye tovuti nyingine. Vipindi vingi vinavyotokana na usalama wa JavaScript ni uvunjaji wa sera moja ya asili au sanduku.

Kuna subsets ya JavaScript-ADsafe kwa ujumla, ECMAScript salama (SES) - ambayo hutoa viwango vingi vya usalama, hasa kwa kanuni iliyoundwa na watu wengine (kama vile matangazo). [55] [56] Caja ni mradi mwingine wa kuingiza salama na kutengwa kwa JavaScript na HTML.

Sera ya Usalama wa Maudhui ni njia kuu inayotakiwa ya kuhakikisha kwamba kanuni tu ya kuaminika inafanywa kwenye ukurasa wa wavuti.

Msalaba-site udhaifu

Tatizo la kawaida la usalama la JavaScript linalohusiana na scripting msalaba (XSS), ukiukwaji wa sera hiyo ya asili . Usalama wa XSS hutokea wakati mshambulizi anaweza kusababisha tovuti ya lengo, kama vile tovuti ya benki ya mtandaoni, ikiwa ni pamoja na script mbaya katika ukurasa wa wavuti uliowasilishwa kwa mhasiriwa. Script katika mfano huu unaweza kisha kufikia programu ya benki na marupurupu ya mwathirika, uwezekano wa kufungua habari za siri au kuhamisha fedha bila idhini ya mwathirika. Suluhisho la udhaifu wa XSS ni kutumia HTML kutoroka wakati wowote unapotayarisha data isiyofunguliwa.

Baadhi ya vivinjari ni pamoja na ulinzi dhidi ya mashambulizi ya ubaguzi yalijitokeza XSS, ambapo mshambuliaji hutoa URL ikiwa ni pamoja na hati mbaya. Hata hivyo, hata watumiaji wa browsers hizo wana hatari zaidi kwa mashambulizi mengine ya XSS, kama vile wale ambao msimbo wa malicious umehifadhiwa kwenye databana. Muundo sahihi tu wa programu za wavuti kwenye upande wa seva unaweza kuzuia kikamilifu XSS.

Uharibifu wa XSS pia unaweza kutokea kwa sababu ya makosa ya utekelezaji na waandishi wa kivinjari. [57]

Usalama mwingine wa tovuti ya msalaba ni uombaji wa maombi ya msalaba (CSRF). Katika CSRF, msimbo kwenye tovuti ya mshambulizi wa kivinjari wa mshambuliaji kuchukua hatua ambazo mtumiaji hakuwa na nia kwenye tovuti ya lengo (kama kuhamisha fedha kwenye benki). Inafanya kazi kwa sababu, kama tovuti ya lengo inategemea tu kwenye cookies ili kuthibitisha maombi, basi maombi yaliyoanzishwa kwa msimbo kwenye tovuti ya mshambuliaji itachukua sifa sawa za kuingilia sahihi kama maombi yaliyoanzishwa na mtumiaji. Kwa ujumla, ufumbuzi wa CSRF ni kuhitaji thamani ya uthibitishaji katika uwanja wa fomu iliyofichwa, na sio tu katika kuki, kuthibitisha ombi lolote ambalo linaweza kuwa na madhara ya kudumu. Kuangalia kichwa cha Referrer cha HTTP kinaweza pia kusaidia.

"Uchapaji wa Javascript" ni aina ya mashambulizi ya CSRF ambayo lebo ya <script> kwenye tovuti ya mshambulizi hutumia ukurasa kwenye tovuti ya mwathirika ambayo inarudi habari binafsi kama JSON au JavaScript. Ufumbuzi iwezekanavyo ni pamoja na:

  • wanaohitaji ishara ya kuthibitisha katika vigezo vya POST na GET kwa majibu yoyote ambayo inarudi habari binafsi.

Uaminifu usiofaa katika mteja

Waendelezaji wa maombi ya mteja-server wanapaswa kutambua kwamba wateja wasiokuwa na nguvu wanaweza kuwa chini ya udhibiti wa washambuliaji. Mwandishi wa maombi hawezi kudhani kwamba msimbo wake wa JavaScript utatembea kama ulivyopangwa (au kwa wote) kwa sababu siri yoyote iliyoingia katika msimbo inaweza kuchukuliwa na adui aliyeamua. Baadhi ya maana ni:

  • Waandishi wa tovuti hawawezi kuficha kabisa jinsi JavaScript yao inavyofanya kazi kwa sababu msimbo wa chanzo kikuu lazima upeleke kwa mteja. Nambari inaweza kuwa imefungwa , lakini uharibifu unaweza kugeuka-engineered.
  • Uthibitishaji wa fomu ya JavaScript hutoa tu urahisi kwa watumiaji, sio usalama. Ikiwa tovuti inathibitisha kwamba mtumiaji alikubaliana na masharti yake ya huduma, au huchagua wahusika batili nje ya mashamba ambayo yanapaswa kuwa na namba tu, ni lazima iwe hivyo kwenye seva, si tu mteja.
  • Maandiko yanaweza kuzimwa kwa uwazi, kwa hivyo JavaScript haiwezi kutegemewa ili kuzuia shughuli kama kubonyeza haki kwenye picha ili kuihifadhi. [58]
  • Ni mazoezi mabaya sana kuingiza habari nyeti kama vile nywila katika JavaScript kwa sababu inaweza kuondolewa na mshambulizi.

Uaminifu usiofaa kwa waendelezaji

Mifumo ya usimamizi wa paket kama vile NPM na Bower ni maarufu kwa watengenezaji wa JavaScript. Mifumo hiyo inaruhusu msanidi programu kusimamia utegemezi wa programu zao kwa maktaba ya programu ya msanidi programu. Waendelezaji wanaamini kuwa watunza wa maktaba wataiweka salama na sasa, lakini sio wakati wote. Utekelezaji umejitokeza kwa sababu ya imani hii ya upofu. Imewekwa kwenye maktaba inaweza kutolewa update ambayo husababisha mende au udhaifu kuonekana katika programu zote zinazotegemea maktaba. Kinyume chake, maktaba inaweza kwenda bila kufungwa na udhaifu unaojulikana nje ya pori. Katika utafiti uliofanywa kuangalia juu ya sampuli ya tovuti 133k, watafiti waligundua 37% ya tovuti ni pamoja na maktaba na angalau moja hatari ya kujulikana. [59] "Laka la kati kati ya toleo la kale la maktaba linatumika kwenye kila tovuti na toleo jipya zaidi la maktaba hiyo ni siku 1,177 katika ALEXA, na ukuaji wa maktaba fulani bado katika matumizi ya kazi imekoma miaka iliyopita." [59] Uwezekano mwingine ni kwamba mlezi wa maktaba anaweza kuondoa maktaba kabisa. Hii ilitokea mwezi wa Machi 2016 wakati Azer Koçulu aliondoa hifadhi yake kutoka NPM . Hii imesababisha maelfu ya programu na tovuti kulingana na maktaba yake kuvunja. [60] [61]

Browser na mipangilio ya kuandika coding

JavaScript hutoa interface kwa uwezo wa kivinjari mbalimbali, ambayo baadhi yake inaweza kuwa na makosa kama vile upungufu wa buffer . Haki hizi zinaweza kuruhusu washambuliaji kuandika scripts ambazo zinaweza kutengeneza msimbo wowote ambao unataka kwenye mfumo wa mtumiaji. Nambari hii si kwa njia yoyote iliyopunguzwa kwenye programu nyingine ya JavaScript. Kwa mfano, matumizi mabaya ya buffer yanaweza kuruhusu mshambuliaji kupata API ya mfumo wa uendeshaji na marupurupu ya superuser.

Haki hizi zimeathiri browsers kuu ikiwa ni pamoja na Firefox, [62] Internet Explorer, [63] na Safari. [64]

Plugins, kama vile wachezaji wa video, Adobe Flash , na udhibiti kamili wa udhibiti wa ActiveX uliowezeshwa kwa default katika Microsoft Internet Explorer, inaweza pia kuwa na hitilafu zinazotumiwa kupitia JavaScript (vile vibaya vimekuwa vilivyotumiwa zamani). [65] [66]

Katika Windows Vista, Microsoft imejaribu kuwa na hatari za mende kama vile upungufu wa buffer kwa kutumia mchakato wa Internet Explorer na marupurupu mdogo. [67] Google Chrome vilevile inazuia waterers wa ukurasa wao wenyewe "sanduku".

Hitilafu za utekelezaji wa Sandbox

Vivinjari vya wavuti vinaweza kuendesha JavaScript nje ya sanduku, na marupurupu muhimu kwa, kwa mfano, kuunda au kufuta faili. Bila shaka, marupurupu kama hayo hayataanishi kupewa kanuni kutoka kwenye Mtandao.

Kupa ruhusa kwa JavaScript kutoka kwenye Mtandao umekuwa na jukumu la udhaifu katika Internet Explorer [68] na Firefox. [69] Katika Windows XP Huduma ya Ufungashaji 2, Microsoft imepata marupurupu ya JScript katika Internet Explorer. [70]

Microsoft Windows inaruhusu faili za chanzo cha Javascript kwenye gari ngumu ya kompyuta ili kuzinduliwa kama mipango ya jumla, isiyo ya sandboxed (angalia: Jeshi la Windows Script ). Hii inafanya Javascript (kama VBScript ) vector inawezekana kwa farasi Trojan , ingawa JavaScript Trojan farasi ni kawaida katika mazoezi. [71] [ si katika funguo iliyotolewa ]

Duka udhaifu

Mwaka 2017 shambulio la msingi la JavaScript kupitia kivinjari limeonyeshwa ambalo linaweza kuvuka ASLR . Inaitwa "ASLR⊕Cache" au AnC. [72] [73]

Inatumia nje ya kurasa za wavuti

Mbali na vivinjari na seva za wavuti, watafsiri wa Javascript wameingizwa katika zana kadhaa. Kila moja ya maombi hayo hutoa yake mwenyewe kitu mfano ambayo inatoa upatikanaji wa mazingira ya jeshi. Lugha ya msingi ya JavaScript inabakia sawa katika kila programu.

Lugha iliyochapishwa ya script

  • Upanuzi wa Google Chrome , upanuzi wa Opera , upanuzi wa Safari 5 wa Apple, Widgets za Dashibodi za Apple, Gadgets za Microsoft, Yahoo! Vilivyoandikwa , Gadget za Desktop ya Google , na Sifa Kliptolipo zinatekelezwa kwa kutumia JavaScript.
  • Mbegu ya MongoDB inakubali maswali yaliyoandikwa katika JavaScript. MongoDB na NodeJS ni sehemu muhimu za MEAN : stack suluhisho la kuunda maombi ya wavuti kwa kutumia Javascript tu.
  • Mbegu ya Clusterpoint inakubali maswali yaliyoandikwa katika JS / SQL, ambayo ni mchanganyiko wa SQL na JavaScript. Clusterpoint imejenga injini ya kompyuta inayowezesha utekelezaji wa msimbo wa JavaScript ndani ya database iliyosambazwa .
  • Adobe Acrobat na Adobe Reader kusaidia JavaScript katika faili za PDF . [74]
  • Zana katika Suite ya Adobe Creative , ikiwa ni pamoja na Photoshop , Illustrator , Dreamweaver , na InDesign , kuruhusu scripting kupitia JavaScript.
  • OpenOffice.org , Suite ya maombi ya ofisi, pamoja na piga yake maarufu LibreOffice , inaruhusu JavaScript kutumiwe kama lugha ya script.
  • Lugha ya programu ya kuona Max , iliyotolewa na Baiskeli '74, inatoa mtindo wa JavaScript wa mazingira yake kwa watengenezaji. Inaruhusu watumiaji kupunguza ugumu wa Visual kwa kutumia kitu kwa kazi badala ya wengi.
  • Programu ya Logic Programu ya X audio ya digital audio (DAW) inaweza kuunda Plugin za madhara MIDI kwa kutumia JavaScript. [75]
  • Injini ya mchezo wa umoja inasaidia toleo la Javascript iliyobadilika kwa scripting kupitia Mono. [76]
  • DX Studio (injini ya 3D) inatumia utekelezaji wa SpiderMonkey ya JavaScript kwa mantiki ya mchezo na simulation. [77]
  • Maxwell Kutoa ( utoaji wa programu) hutoa injini ya scripting ya msingi ya ECMA kwa automatisering kazi. [78]
  • Hati ya Google Apps katika Google Spreadsheets na Sites za Google inaruhusu watumiaji kujenga fomu desturi, automatiska kazi kurudia na pia kuingiliana na bidhaa nyingine Google kama Gmail. [79]
  • Wengi wa wateja wa IRC , kama ChatZilla au XChat , wanatumia JavaScript kwa uwezo wao wa scripting. [80] [81]
  • Muumba wa RPG MV anatumia JavaScript kama lugha yake ya scripting. [82]
  • Mhariri wa maandishi UltraEdit hutumia JavaScript 1.7 kama lugha ya ndani ya script, ililetwa na toleo la 13 mwaka 2007.

Siri ya script

  • Teknolojia ya Active Scripting ya Microsoft inasaidia JScript kama lugha ya script. [83]
  • Java ilianzisha mfuko wa javax.script katika toleo la 6 ambalo linajumuisha utekelezaji wa JavaScript kulingana na Mozilla Rhino . Kwa hivyo, programu za Java zinaweza kuwa na hati za maandishi ambazo zinafikia vigezo na vitu vya programu, kama vile scripts za jitihada za wavuti za Mtandao ambazo zinaweza kufikia Kitabu cha Object Document (DOM) cha ukurasa wa wavuti. [84] [85]
  • Kitabu cha chombo cha Qt C + + kinajumuisha moduli ya QtScript ili kutafsiri JavaScript, inayofanana na mfuko wa javax wa Java. [86]
  • OS X Yosemite ilianzisha JavaScript kwa Automation (JXA), ambayo imejengwa juu ya JavaScriptCore na Architecture Open Scripting . Inajenga daraja la Malengo-C ambayo inawezesha maombi yote ya Koao kuwa programmed katika JavaScript.
  • JavaScript OSA (inayojulikana kama Javascript ya OSA, au JSOSA) ni mbadala ya bureware kwa AppleScript kwa OS X. Inategemea utekelezaji wa JavaScript ya Mozilla 1.5, pamoja na kuongeza kitu cha MacOS kwa kuingiliana na mfumo wa uendeshaji na maombi ya tatu.

Maombi jukwaa

  • ActionScript , lugha ya programu inayotumiwa katika Adobe Flash , ni utekelezaji mwingine wa kiwango cha ECMAScript.
  • Adobe AIR (Adobe Integrated Runtime) ni wakati wa kukimbia wa JavaScript ambao inaruhusu watengenezaji kuunda programu za desktop.
  • Electron ni mfumo wa chanzo cha wazi unaotengenezwa na GitHub .
  • Hali ya Teknolojia ya Auto Technologies ya AutoShell imejengwa kwenye injini ya JavaScript ya SpiderMonkey . Ina vidonge kama vile upanuzi wa ufafanuzi wa amri, pamoja na madarasa ya desturi kwa kazi mbalimbali zinazohusiana na mfumo kama faili ya I / O, maombi ya amri ya uomba na redirection, na COM scripting.
  • Apache Cordova ni mfumo wa maendeleo ya maombi ya simu
  • Cocos2d ni mfumo wa programu ya wazi. Inaweza kutumika kujenga michezo, programu na programu nyingine za mipangilio ya mipangilio ya GUI msingi
  • Mfumo ulioingizwa wa Chromium (CEF) ni mfumo wa chanzo cha wazi wa kuingiza injini ya kivinjari ya wavuti kulingana na msingi wa Chromium
  • RhoMobile Suite ni seti ya zana za maendeleo kwa ajili ya kujenga data-centric, msalaba-jukwaa, asili ya watumiaji wa simu na maombi ya biashara.
  • NW.js huita kila moduli za Node.js moja kwa moja kutoka DOM na kuwezesha njia mpya ya kuandika programu na teknolojia zote za Mtandao. [87]
  • Shell ya GNOME , shell kwa mazingira ya GNOME 3 desktop, [88] alifanya JavaScript lugha yake ya programu ya default mwaka 2013. [89]
  • Jukwaa la maombi ya Mozilla (XPFE), ambalo linashikilia Firefox , Thunderbird , na vivinjari vingine vya wavuti, hutumia JavaScript kutekeleza interface ya mtumiaji graphic (GUI) ya bidhaa zake mbalimbali.
  • Lugha ya Qt Quick (inapatikana tangu Qt 4.7) inatumia Javascript kwa mantiki ya maombi yake. Mtazamo wake wa kueneza pia ni sawa na JavaScript.
  • Ubuntu Touch hutoa JavaScript API kwa interface yake umoja usability.
  • Fungua webOS ni kizazi kijacho cha majukwaa ya mtandao yaliyojengwa ili kukimbia kwenye aina mbalimbali za fomu. [90]
  • jicho JS ni mfumo wa kuendeleza programu kwa majukwaa yote makubwa, kutoka simu na vidonge kwa PC na TV [91]
  • WinJS hutoa Maabara maalum ya Windows kwa ajili ya utendaji wa JavaScript katika Windows 8 ambayo inawezesha maendeleo ya mtindo wa kisasa (zamani wa Metro style ) maombi katika HTML5 na JavaScript.
  • NativeScript ni mfumo wa chanzo cha wazi ili kuendeleza programu kwenye majukwaa ya iOS na Android.
  • Weex ni mfumo wa kujenga UI msalaba-jukwaa, iliyoundwa na China Tech kubwa Alibaba [92]
  • XULRunner ni vifurushi vyema vya jukwaa la Mozilla ili kuwezesha maendeleo ya programu ya desktop

Vifaa vya Maendeleo

Ndani ya JavaScript, upatikanaji wa debugger inakuwa muhimu wakati wa kuendeleza mipango mikubwa, isiyo ya kawaida. Kwa sababu kuna tofauti za utekelezaji kati ya vivinjari mbalimbali (hasa ndani ya DOM), ni muhimu kuwa na upatikanaji wa debugger kwa kila kivinjari ambacho ni malengo ya programu ya Mtandao. [93]

Wafanyabiashara wa script wameunganishwa ndani ya Internet Explorer , Firefox , Safari , Google Chrome , Opera na Node.js. [94] [95] [96]

Mbali na Vyombo vya Msanidi wa Programu za Programu za Programu za Wasanidi Programu , watoaji wa tatu watapatikana kwa Internet Explorer: Microsoft Visual Studio ni tajiri zaidi ya tatu, ikifuatwa kwa karibu na Microsoft Script Editor (sehemu ya Microsoft Office ), [97] na hatimaye Microsoft huru Debugger ya Script ambayo ni ya msingi zaidi kuliko mbili nyingine. Msaidizi wa Microsoft Visual Web Developer Express hutoa toleo la mdogo wa utendaji wa kufuta JavaScript katika Microsoft Visual Studio. Internet Explorer imejumuisha zana za msanidi programu tangu toleo la 8.

Kwa kulinganisha na Internet Explorer, Firefox ina seti ya kina zaidi ya zana za msanidi programu, ambayo ni pamoja na debugger pia. Matoleo ya zamani ya Firefox bila zana hizi hutumia addon ya Firefox inayoitwa Firebug , au mtumiaji wa zamani wa Venkman . Pia, Mkaguzi wa Mtandao wa WebKit unajumuisha debugger ya JavaScript, [98] ambayo hutumiwa Safari . Toleo la marekebisho inayoitwa Blink DevTools linatumika kwenye Google Chrome . Node.js ina Mkaguzi wa Node, mtejaji wa mwingiliano anayeunganisha na Blink DevTools, inapatikana katika Google Chrome . Opera inajumuisha seti ya zana inayoitwa Dragonfly . [99]

Mbali na programu ya kompyuta ya asili, kuna vitambulisho vya JavaScript mtandaoni, visaidia vya kukodisha ambavyo vimeandikwa kwa JavaScript na kujengwa ili kuendesha kwenye Mtandao. Mfano ni mpango wa JSLint , ulioandaliwa na Douglas Crockford ambaye ameandika sana juu ya lugha. JSLint inatafuta code ya Javascript kwa kufanana na seti ya viwango na miongozo. Maktaba mengi ya Javascript, kama vile tatu.js , hutoa viungo kwenye msimbo wa maandamano ambayo yanaweza kuhaririwa na watumiaji. Pia hutumiwa kama chombo cha kufundisha na taasisi kama vile Khan Academy [100] ili kuruhusu wanafunzi kupata uzoefu wa kuandika katika mazingira ambapo wanaweza kuona pato la programu zao, bila kuhitaji kuanzisha yoyote zaidi ya kivinjari cha wavuti.

Vifaa vya benchmark kwa watengenezaji

Kwa kuwa JavaScript inapata muhimu zaidi kwa ajili ya maendeleo ya wavuti (frontend inachukua mambo mengi ambayo yamefanywa katika backend kabla), pia kunazingatiwa zaidi kuhusu utendaji. Vifaa vyenye vifaa vya simu vinaweza kuwa na shida ya utoaji na usindikaji wa mantiki isiyo na kazi.

Maktaba kwa kufanya benchmarks ni benchmark.js . Maktaba ya benchmarking ambayo inasaidia muda wa kutatua azimio na inarudi matokeo ya takwimu muhimu [ citation inahitajika ] .

Chombo kingine ni jsben.ch . Kitambulisho cha JavaScript cha benchmarking, ambapo snippets za kificho zinaweza kupimwa dhidi ya kila mmoja.

Historia ya toleo

JavaScript ilianzishwa awali mwaka wa 1996 kwa ajili ya matumizi katika kivinjari cha Mtandao wa Netscape Navigator . Katika mwaka huo huo Microsoft iliyotolewa utekelezaji kwa Internet Explorer. Utekelezaji huu uliitwa JScript kutokana na masuala ya biashara. Mwaka wa 1997, toleo la kwanza la lugha lililotolewa kwa jina la ECMAScript katika toleo la kwanza la kiwango cha ECMA-252. Vipengee vilivyo wazi na vipengele vya lugha vilikuwa ni maalum ya Mozilla na imeondolewa. Firefox 4 ilikuwa toleo la mwisho ambalo limeelezea toleo la JavaScript (1.8.5). Kwa matoleo mapya ya kiwango cha ECMA-262, vipengele vya lugha ya JavaScript sasa vinatajwa mara kwa mara kwa ufafanuzi wao wa awali katika matoleo ya ECMA-262.

Jedwali linalofuata linategemea habari kutoka vyanzo vingi. [101] [102] [103]

Toleo Tarehe ya kutolewa Inalingana na Netscape
Navigator
Mozilla
Firefox
Internet
Mtafiti
Opera Safari Google
Chrome
Toleo la zamani, halikusaidia tena: 1.0 Machi 1996 2.0 3.0
Toleo la zamani, halikusaidia tena: 1.1 Agosti 1996 3.0
Toleo la kale, halikushiriki tena: 1.2 Juni 1997 4.0-4.05 3
Toleo la kale, halikusaidia tena: 1.3 Oktoba 1998 ECMA-262 toleo la kwanza + la 2 4.06-4.7x 4.0 5 [104]
Toleo la kale, halikusaidia tena: 1.4 Netscape
Seva
6
Toleo la zamani, halikushiriki tena: 1.5 Novemba 2000 ECMA-262 toleo la 3 6.0 1.0 5.5 (JScript 5.5),
6 (JScript 5.6),
7 (JScript 5.7),
8 (JScript 5.8)


7.0 3.0-5 1.0-10.0.666
Toleo la kale, halikusaidia tena: 1.6 Novemba 2005 Safu ya ziada ya + 1.5 + na jenereta za kamba + E4X 1.5
Toleo la kale, halikushiriki tena: 1.7 Oktoba 2006 1.6 + jenereta za pythoniki + iterators + basi 2.0 28.0.1500.95
Toleo la zamani, halikushiriki tena: 1.8 Juni 2008 1.7 + maneno ya jenereta + kufungwa kwa maneno 3.0 11.50
Toleo la zamani, halikuunga mkono tena: 1.8.1 Usaidizi wa asili wa 1.8 + wa JSON + updates ndogo 3.5
Toleo la zamani, hailishiriki tena: 1.8.2 Juni 22, 2009 1.8.1 + updates ndogo 3.6
Toleo la zamani, halikuunga mkono tena: 1.8.5 Julai 27, 2010 1.8.2 + vipengele vipya kwa kufuata toleo la 5 la ECMA-262 4.0

Lugha zinazohusiana na vipengele

JSON , au Jedwali la Kitu cha Javascript, ni muundo wa kubadilishana wa kusambaza data ambao hufafanuliwa kama sehemu ndogo ya kitu halisi cha Javascript ya kitu halisi. Kama vile Javascript nyingi (regexps na kazi zisizojulikana kama vipengele vya darasa la kwanza, kufungwa, madarasa yenye kubadilika, 'kutumia kali'), JSON , isipokuwa kuchukua nafasi ya operator wa thamani ya Perl '=>' na RFC 822 [ inspired ] : ', ni Perk syntactically safi.

jQuery ni maktaba maarufu ya Javascript yaliyopangwa ili kurahisisha scripting ya DOM -iliyokamilika ya mteja wa sambamba pamoja na kutoa utangamano wa msalaba-browser kwa sababu browsers mbalimbali hujibu tofauti kwa kanuni fulani ya JavaScript ya vanilla.

Underscore.js ni maktaba ya jarida ya javascript ya udanganyifu wa data ambayo hutumiwa katika maombi ya mtandao wa mteja na upande wa seva.

Angular na AngularJS ni mifumo ya maombi ya mtandao ambayo hutumiwa kwa ajili ya kuendeleza programu za ukurasa mmoja na pia programu za simu za mkononi.

React (Maktaba ya JavaScript) ni maktaba ya wazi ya javascript ya JavaScript ambayo hutoa maoni ambayo hutumiwa kwa kutumia vipengele vinavyotambulishwa kama vitambulisho vya HTML.

Wasanidi wa Mozilla wanaunga mkono LiveConnect , kipengele kinaruhusu JavaScript na Java kuingiliana kwenye Wavuti. Hata hivyo, usaidizi maalum wa Mozilla kwa LiveConnect ulipangwa kufanyika kwa siku zijazo kwa kupitisha utunzaji wa LiveConnect kupitia NPAPI kwa Java 1.6+ plug-in (ambayo bado haijaungwa mkono kwenye Mac kama Machi 2010 ) . [106] Vifaa vingi vya ukaguzi vya kivinjari, kama vile Firebug katika Firefox, vinajumuisha wakalimani wa Javascript ambao wanaweza kutenda kwenye DOM ya ukurasa inayoonekana.

asm.js ni subset ya JavaScript ambayo inaweza kukimbia katika injini yoyote ya JavaScript au kukimbia kwa kasi katika kabla ya muda (AOT) kuandaa injini. [107]

JSFuck ni lugha ya programu ya esoteric . Programu zimeandikwa kwa kutumia wahusika sita tofauti, lakini bado ni sahihi JavaScript code.

p5.js [108] ni maktaba ya JavaScript inayotengwa kwa ajili ya wasanii na wabunifu. Inategemea mawazo ya mradi wa Processing lakini ni kwa wavuti.

jsben.ch ni chombo hicho cha JavaScript cha benchmarking, ambapo snippets tofauti za kanuni zinaweza kupimwa dhidi ya kila mmoja.

CRISP: Mkakati unaoongoza Maendeleo ya Maombi ya Wingu kwa Watangulizi ni mkakati uliopendekezwa na Ayush Sahu kuendeleza programu bora na salama ya JavaScript kutumiwa kwa simu za mkononi, vifaa vya PC na vifaa vingine. CRISP (Mpangilio, Nambari ya Mageuzi, Mchapishaji wa moduli, Sandbox, Kipengee) imependekezwa kwa uongofu uliosafishwa wa programu ya asili kwa JavaScript kwa ajili ya maendeleo ya maombi ya wingu. Javascript imechaguliwa kuwa ya kati kwa ajili ya kuandika maombi kwa sababu ni lugha ya kawaida kutumika kati ya watengenezaji na hutoa API tajiri (Programu ya Programu ya Maombi) kwa ajili ya kuandika maombi. [109]

Tumia kama lugha ya kati

Kama Javascript ndiyo lugha ya mteja inayoungwa mkono zaidi ambayo inaweza kukimbia ndani ya kivinjari cha Wavuti, imekuwa lugha ya kati ya lugha zingine kwa lengo. Hii imejumuisha lugha zote zilizopangwa na bandari ya lugha zilizopo. Baadhi ya haya ni pamoja na:

  • OberonScript, utekelezaji kamili wa lugha ya programu ya Oberon ambayo inakusanya kwa JavaScript ya juu. [110]
  • Lengo-J , superset ya JavaScript inayojumuisha JavaScript. Inaongeza urithi wa jadi na mtindo wa Smalltalk / Lengo-C wa nguvu na uchapishaji wa pseudo-static kwa JavaScript.
  • Processing.js , bandari ya JavaScript ya lugha ya programu ya Processing inayotengenezwa kuandika visualizations, picha, na maudhui maingiliano. Inaruhusu vivinjari vya wavuti kuonyesha maonyesho, programu za visu, michezo na vitu vingine vyenye kielelezo bila uhitaji wa applet ya Java au Plugin ya Flash.
  • CoffeeScript , syntax mbadala kwa Javascript inalenga kuwa na mafupi zaidi na ya kuonekana. Inaongeza vipengele kama ufafanuzi wa safu (pia inapatikana kwa JavaScript tangu toleo la 1.7) [111] na muundo unaofanana. Kama Lengo- J, linaunganisha JavaScript. Ruby na Python zimesemwa kuwa na ushawishi mkubwa juu ya syntax ya Kahawa.
  • Kitabu cha Mtandao cha Google kinafsiri sehemu ndogo ya Java hadi JavaScript.
  • Scala , lugha inayolengwa na kazi ya programu ya programu, ina compiler ya Scala-Java-JavaScript. [112]
  • Pyjs , bandari ya Google Toolkit Toolkit kwa Python inatafsiri sehemu ndogo ya Python hadi JavaScript.
  • Daraja la Google , lugha ya chanzo cha wazi , ambayo inaunganisha JavaScript.
  • Whalesong, [113] mkusanyiko wa Racket -to-JavaScript.
  • Emscripten , LLVM- inarudi kwa kufungua maktaba ya asili kwa JavaScript, inayojulikana kama asm.js [114]
  • Fantom lugha ya programu inayoendesha JVM, .NET na JavaScript.
  • TypeScript , lugha ya bure na programu ya programu ya wazi inayotengenezwa na Microsoft. Ni superset ya JavaScript, na kimsingi inaongeza msaada kwa annotation aina ya aina na upanuzi wa lugha nyingine kama vile madarasa, interfaces na modules. Script TS inaunganisha kwenye JavaScript wazi na inaweza kutekelezwa katika jeshi lolote la JS inayounga mkono ECMAScript 3 au zaidi. The compiler yenyewe imeandikwa katika TypeScript.
  • Haxe , lugha ya wazi ya kiwango cha juu cha programu ya programu ya multiplatform na compiler ambayo inaweza kuzalisha maombi na msimbo wa chanzo kwa majukwaa mengi tofauti ikiwa ni pamoja na JavaScript.
  • ClojureScript, [115] compiler kwa Clojure ambayo inalenga JavaScript. Imeundwa ili kuondokana na msimbo wa Javascript ambao unaambatana na hali ya kukusanya ya juu ya Google Closure inayoboresha compiler.
  • Kotlin , lugha ya statically typed ambayo pia kukusanya kwa Java byte code .
  • SqueakJS , mashine ya kawaida na mazingira ya DOM kwa utekelezaji wa Squeak wazi wa lugha ya programu ya Smalltalk .

Kama Javascript ina mapungufu yasiyo ya kawaida - kama vile aina isiyo ya wazi ya integer, ni mara mbili tu ya usahihi wa binary floating point - lugha ambazo zinajiunga na JavaScript na hazitunza kutumia mabadiliko ya integer na waendeshaji wa busara wachache wanaweza kuwa na tabia tofauti kidogo kuliko nyingine mazingira.

JavaScript na Java

Ujambo wa kawaida usiofaa ni kwamba JavaScript ni sawa au kuhusiana na Java . Ni kweli kwamba wote wana syntax ya C-sawa (lugha ya C kuwa lugha yao ya kawaida ya baba zao). Wote pia ni kawaida sandboxed (wakati kutumika ndani ya browser), na JavaScript iliundwa na syntax Java na maktaba ya kawaida katika akili. Hasa, maneno yote ya Java yalihifadhiwa katika JavaScript ya awali, maktaba ya kawaida ya JavaScript ifuatavyo maagizo ya Java na Matamshi ya Javascript yanategemea madarasa kutoka kwa Java 1.0, [116] lakini kufanana kumalizika huko.

Java na Javascript wote walionekana kwanza tarehe 23 Mei 1995, lakini Java ilianzishwa na James Gosling wa Sun Microsystems, na JavaScript kwa Brendan Eich ya NetScape Communications.

Tofauti kati ya lugha mbili ni maarufu zaidi kuliko kufanana kwao. Java ina kuchapa tuli , wakati kuandika kwa JavaScript kuna nguvu . Java imesababishwa kutoka kwa kitambulisho cha maandishi, wakati Javascript imesababishwa kama msimbo wa chanzo kinachoonekana na kibinadamu. Vitu vya Java ni msingi wa darasa , wakati Javascript ni makao-msingi . Hatimaye, Java haikuunga mkono programu za kazi hadi Java 8, wakati Javascript amefanya hivyo tangu mwanzoni, akiwa na ushawishi na Mpango .

Angalia pia

  • WebAssembly

Marejeleo

  1. ^ Flanagan 2011 , pp. 1–2.
  2. ^ a b Press release announcing JavaScript , "Netscape and Sun announce JavaScript", PR Newswire, December 4, 1995
  3. ^ "Standard ECMA-262" . Ecma International. 2017-07-03.
  4. ^ "RFC 4329" . Apps.ietf.org. Archived from the original on 2014-03-16 . Retrieved 16 February 2016 .
  5. ^ "System-Declared Uniform Type Identifiers" . Mac OS X Reference Library . Apple Inc . Retrieved 2010-03-05 .
  6. ^ "JavaScript" . Collins English Dictionary – Complete & Unabridged 2012 Digital Edition . William Collins Sons & Co. 2012 . Retrieved 21 August 2015 .
  7. ^ "ECMAScript Language Overview" (PDF) . 2007-10-23. p. 4 . Retrieved 2009-05-03 .
  8. ^ Severance, Charles (February 2012). "JavaScript: Designing a Language in 10 Days" . Computer . IEEE Computer Society. 45 (2): 7–8. doi : 10.1109/MC.2012.57 . Retrieved 23 March 2013 .
  9. ^ "TechVision: Innovators of the Net: Brendan Eich and JavaScript" . web.archive.org. Archived from the original on 2008-02-08.
  10. ^ "The History of Programming Languages" . oreilly.com . O'Reilly Media. 2004 . Retrieved 16 July 2016 .
  11. ^ "What Is JavaScript?" (PDF) . wiley.com . Wiley . Retrieved 16 July 2016 .
  12. ^ Noorda, Brent (21 September 2013). "Brent Noorda's Answers on ECMA" . quora.com . Retrieved 16 July 2016 .
  13. ^ Noorda, Brent (24 June 2010). "History of Nombas" . brent-noorda.com . Retrieved 16 July 2016 .
  14. ^ Eich, Brendan (21 June 2011). "New JavaScript Engine Module Owner" . brendaneich.com . Retrieved 16 July 2016 .
  15. ^ Netscape Communications Corporation (11 December 1998). "Server-Side JavaScript Guide" . oracle.com . Netscape Communications Corporation . Retrieved 2016-07-16 .
  16. ^ Mahemoff, Michael (17 December 2009). "Server-Side JavaScript, Back with a Vengeance" . readwrite.com . Retrieved 2016-07-16 .
  17. ^ a b c Champeon, Steve (6 April 2001). "JavaScript, How Did We Get Here?" . oreilly.com . Retrieved 16 July 2016 .
  18. ^ "Microsoft Internet Explorer 3.0 Beta Now Available" . microsoft.com . Microsoft. 29 May 1996 . Retrieved 16 July 2016 .
  19. ^ McCracken, Harry (16 September 2010). "The Unwelcome Return of "Best Viewed with Internet Explorer " " . technologizer.com . Retrieved 16 July 2016 .
  20. ^ "Documentation" . ecmascript.org . Retrieved 16 July 2016 .
  21. ^ "Standard ECMA-262" . Ecma International. 2017-07-03.
  22. ^ Crockford, Douglas (2001). "JavaScript, The World's Most Misunderstood Programming Language" . crockford.com . Retrieved 16 July 2016 .
  23. ^ Kowal, Kris (1 December 2009). "CommonJS Effort Sets JavaScript on Path for World Domination" . arstechnica.com . Retrieved 16 July 2016 .
  24. ^ "USPTO Copyright entry #75026640" . USPTO.
  25. ^ "Sun Trademarks" . Sun Microsystems. Archived from the original on 28 May 2010 . Retrieved 2007-11-08 .
  26. ^ Flanagan 2006 , p. 16.
  27. ^ "JavaScript data types and data structures - JavaScript | MDN" . Developer.mozilla.org . 2017-02-16 . Retrieved 2017-02-24 .
  28. ^ Flanagan 2006 , pp. 176–178.
  29. ^ "Inheritance and the prototype chain" . Mozilla Developer Network . Mozilla . Retrieved 6 April 2013 .
  30. ^ Herman, David (2013). Effective JavaScript . Addison-Wesley. p. 83. ISBN 978-0-321-81218-6 .
  31. ^ Haverbeke, Marijn (2011). Eloquent JavaScript . No Starch Press. pp. 95–97. ISBN 978-1-59327-282-1 .
  32. ^ Katz, Yehuda. "Understanding "Prototypes" in JavaScript" . Retrieved 6 April 2013 .
  33. ^ Herman, David (2013). Effective JavaScript . Addison-Wesley. pp. 125–127. ISBN 978-0-321-81218-6 .
  34. ^ "Properties of the Function Object" . Es5.github.com . Retrieved 2013-05-26 .
  35. ^ Flanagan 2006 , p. 141.
  36. ^ The many talents of JavaScript for generalizing Role-Oriented Programming approaches like Traits and Mixins , Peterseliger.blogpsot.de, April 11, 2014.
  37. ^ Traits for JavaScript , 2010.
  38. ^ "Home | CocktailJS" . Cocktailjs.github.io . Retrieved 2017-02-24 .
  39. ^ Angus Croll, A fresh look at JavaScript Mixins , published May 31, 2011.
  40. ^ "Concurrency model and Event Loop" . Mozilla Developer Network . Retrieved 2015-08-28 .
  41. ^ Haverbeke, Marijn (2011). Eloquent JavaScript . No Starch Press. pp. 139–149. ISBN 978-1-59327-282-1 .
  42. ^ Robert Nyman, Getters And Setters With JavaScript – Code Samples And Demos , Robertnyman.com, published 29 May 2009, accessed 2 January 2010.
  43. ^ John Resig, JavaScript Getters and Setters , Ejohn.org, 18 July 2007, accessed 2 January 2010
  44. ^ "E4X – Archive of obsolete content | MDN" . Mozilla Developer Network . Mozilla Foundation. Feb 14, 2014 . Retrieved 13 July 2014 .
  45. ^ "var – JavaScript – MDN" . The Mozilla Developer Network . Retrieved 22 December 2012 .
  46. ^ "ECMAScript Language Specification – ECMA-262 Edition 5.1" . Ecma International . Retrieved 22 December 2012 .
  47. ^ "console" . Mozilla Developer Network . Mozilla . Retrieved 6 April 2013 .
  48. ^ "arguments" . Mozilla Developer Network . Mozilla . Retrieved 6 April 2013 .
  49. ^ https://w3techs.com/technologies/details/cp-javascript/all/all
  50. ^ "JavaScript tracking – Piwik" . Piwik . Retrieved 31 March 2012 .
  51. ^ Hamilton, Naomi (2008-07-31). "The A-Z of Programming Languages: JavaScript" . computerworld.com.au.
  52. ^ "Javascript - Object detection" . Quirksmode.org . Retrieved 2017-02-24 .
  53. ^ Peter-Paul Koch, Mission Impossible – mouse position
  54. ^ "JavaScript - Browser detect" . Quirksmode.org . Retrieved 2017-02-24 .
  55. ^ "Making JavaScript Safe for Advertising" . ADsafe . Retrieved 2013-05-26 .
  56. ^ "Secure ECMA Script (SES)" . Code.google.com . Retrieved 2013-05-26 .
  57. ^ "Mozilla Cross-Site Scripting Vulnerability Reported and Fixed - MozillaZine Talkback" . Mozillazine.org . Retrieved 2017-02-24 .
  58. ^ "Right-click "protection"? Forget about it" . 2008-06-17. ISSN 1797-1993 . Retrieved 2008-06-17 .
  59. ^ a b "Thou Shalt Not Depend on Me: Analysing the Use of Outdated JavaScript Libraries on the Web" (PDF) . 2016-12-21 . Retrieved 2017-02-22 .
  60. ^ Quartz, How one programmer broke the internet by deleting a tiny piece of code
  61. ^ SC Magazine UK, Developer's 11 lines of deleted code 'breaks the internet'
  62. ^ Mozilla Corporation, Buffer overflow in crypto.signText()
  63. ^ Festa, Paul (August 19, 1998). "Buffer-overflow bug in IE" . CNET . Archived from the original on December 25, 2002.
  64. ^ SecurityTracker.com, Apple Safari JavaScript Buffer Overflow Lets Remote Users Execute Arbitrary Code and HTTP Redirect Bug Lets Remote Users Access Files
  65. ^ SecurityFocus, Microsoft WebViewFolderIcon ActiveX Control Buffer Overflow Vulnerability
  66. ^ Fusion Authority, Macromedia Flash ActiveX Buffer Overflow
  67. ^ "Protected Mode in Vista IE7 – IEBlog" . Blogs.msdn.com . 2006-02-09 . Retrieved 2017-02-24 .
  68. ^ US CERT, Vulnerability Note VU#713878: Microsoft Internet Explorer does not properly validate source of redirected frame
  69. ^ Mozilla Foundation, Mozilla Foundation Security Advisory 2005–41: Privilege escalation via DOM property overrides
  70. ^ Microsoft Corporation, Changes to Functionality in Microsoft Windows XP Service Pack 2: Part 5: Enhanced Browsing Security
  71. ^ For one example of a rare JavaScript Trojan Horse, see Symantec Corporation, JS.Seeker.K
  72. ^ AnC VUSec, 2017
  73. ^ New ASLR-busting JavaScript is about to make drive-by exploits much nastier Ars Technica, 2017
  74. ^ "JavaScript for Acrobat" . Retrieved 2009-08-18 .
  75. ^ "Logic Pro X" . Apple . Apple, Inc . Retrieved January 31, 2017 .
  76. ^ "Unity Scripting" . unity3d.com . Retrieved 2013-01-29 .
  77. ^ "Technical Specification" . dxstudio.com . Retrieved 2009-10-20 .
  78. ^ THINK! The Maxwell Render Resourcer Center, Scripting References
  79. ^ Google Apps Script , Google Apps Script
  80. ^ "ChatZilla! Frequently Asked Questions – 4.5. How do I write scripts?" . Chatzilla.hacksrus.com . Retrieved 11 February 2011 .
  81. ^ "Xcdscript" . Archived from the original on 1 May 2011 . Retrieved 11 February 2011 .
  82. ^ "RPG Maker MV | RPG Maker | Make Your Own Games!" . Retrieved 28 August 2015 .
  83. ^ "Version Information (JavaScript)" . Msdn.microsoft.com . Retrieved 2013-05-26 .
  84. ^ "javax.script release notes" . Java.sun.com . Retrieved 2009-05-19 .
  85. ^ Flanagan 2006 , pp. 214 et seq.
  86. ^ Nokia Corporation, QtScript Module
  87. ^ "NW.js" . Nwjs.io . Retrieved 2017-02-24 .
  88. ^ "Behind the Scenes with Owen Taylor" . The GNOME Journal. Archived from the original on 2012-12-21 . Retrieved 2010-01-23 .
  89. ^ "Answering the question: "How do I develop an app for GNOME? " " .
  90. ^ [1]
  91. ^ "Enyo JavaScript Application Framework" . Enyojs.com . Retrieved 2017-02-24 .
  92. ^ [2]
  93. ^ "Advanced Debugging With JavaScript" . alistapart.com. 2009-02-03 . Retrieved 2010-05-28 .
  94. ^ "The JavaScript Debugging Console" . javascript.about.com. 2010-05-28 . Retrieved 2010-05-28 .
  95. ^ "SplineTech JavaScript Debugger – an independent standalone JavaScript Debugger" . javascript-debugger.com. 2013-08-26 . Retrieved 2013-08-26 .
  96. ^ "Debugging with Node Inspector" . docs.strongloop.com . Retrieved 2014-05-07 .
  97. ^ JScript development in Microsoft Office 11 (MS InfoPath 2003)
  98. ^ "Introducing Drosera – Surfin' Safari" . Webkit.org. 2006-06-28 . Retrieved 2009-05-19 .
  99. ^ "Opera DragonFly" . Opera Software.
  100. ^ "Khan Academy Computer Science" . Retrieved 28 Sep 2012 .
  101. ^ "New in JavaScript" . developer.mozilla.org. 2014 . Retrieved 2016-07-16 .
  102. ^ "JavaScript – JScript – ECMAScript version history" . Webmasterworld.com . Retrieved 2009-12-17 .
  103. ^ John Resig. "Versions of JavaScript" . Ejohn.org . Retrieved 2009-05-19 .
  104. ^ "What Version of Javascript" . Javascript.about.com . 2016-02-22 . Retrieved 2017-02-24 .
  105. ^ "RFC 822 - STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES" . Tools.ietf.org . 1982-08-13 . Retrieved 2017-02-24 .
  106. ^ Release Notes for the Next-Generation Java™ Plug-In Technology (introduced in Java SE 6 update 10) . Java.sun.com. Retrieved on 2013-06-13.
  107. ^ "frequently asked questions" . asm.js . Retrieved 2014-04-13 .
  108. ^ "Home" . p5.js . 2017-01-21 . Retrieved 2017-02-24 .
  109. ^ "Home" . dspace.thapar.edu:8080 . 2016-08-26 . Retrieved 2016-08-26 .
  110. ^ Ralph Sommerer. "Oberon Script. A Lightweight Compiler and Runtime System for the Web" . research.microsoft.com . Retrieved 2015-12-18 .
  111. ^ "New in JavaScript 1.7" . Developer.mozilla.org. 2012-12-05 . Retrieved 2013-05-26 .
  112. ^ Sébastien Doeraene. "Scala.js" . Lampwww.epfl.ch . Retrieved 2014-04-13 .
  113. ^ "Whalesong: a Racket to JavaScript compiler" . Hashcollision.org . Retrieved 2014-04-13 .
  114. ^ Walton, Zach (2012-04-04). "Easily Port C++ To HTML5/JavaScript With Emscripten" . WebProNews . iEntry Network.
  115. ^ "clojure/clojurescript · GitHub" . Github.com . Retrieved 2014-04-13 .
  116. ^ Brendan Eich (3 April 2008). "Popularity" . Retrieved 2012-01-19 .

Kusoma zaidi

  • Bhangal, Sham; Jankowski, Tomasz (2003). Foundation Web Design: Essential HTML, JavaScript, CSS, PhotoShop, Fireworks, and Flash . APress L. P. ISBN 1-59059-152-6 .
  • Burns, Joe; Growney, Andree S. (2001). JavaScript Goodies . Pearson Education. ISBN 0-7897-2612-2 .
  • Duffy, Scott (2003). How to do Everything with JavaScript . Osborne. ISBN 0-07-222887-3 .
  • Flanagan, David (2006). JavaScript: The Definitive Guide (5th ed.). O'Reilly & Associates . ISBN 0-596-10199-6 .
  • Flanagan, David (2011). JavaScript: The Definitive Guide (6th ed.). O'Reilly & Associates . ISBN 978-0-596-80552-4 .
  • Goodman, Danny; Eich, Brendan (2001). JavaScript Bible . John Wiley & Sons. ISBN 0-7645-3342-8 .
  • Goodman, Danny; Markel, Scott (2003). JavaScript and DHTML Cookbook . O'Reilly & Associates. ISBN 0-596-00467-2 .
  • Harris, Andy (2001). JavaScript Programming for the Absolute Beginner . Premier Press. ISBN 0-7615-3410-5 .
  • Haverbeke, Marijn (2011). Eloquent JavaScript . No Starch Press. ISBN 978-1-59327-282-1 .
  • Heinle, Nick; Koman, Richard (1997). Designing with JavaScript . O'Reilly & Associates. ISBN 1-56592-300-6 .
  • Husted, Robert; Kuslich, JJ (1999). Server-Side JavaScript: Developing Integrated Web Applications (1st ed.). Addison-Wesley. ISBN 0-201-43329-X .
  • McDuffie, Tina Spain (2003). JavaScript Concepts & Techniques: Programming Interactive Web Sites . Franklin, Beedle & Associates. ISBN 1-887902-69-4 .
  • McFarlane, Nigel (2003). Rapid Application Development with Mozilla . Prentice Hall Professional Technical References. ISBN 0-13-142343-6 .
  • Powell, Thomas A.; Schneider, Fritz (2001). JavaScript: The Complete Reference . McGraw-Hill Companies. ISBN 0-07-219127-9 .
  • Shelly, Gary B.; Cashman, Thomas J.; Dorin, William J.; Quasney, Jeffrey J. (2000). JavaScript: Complete Concepts and Techniques . Cambridge: Course Technology. ISBN 0-7895-6233-2 .
  • Vander Veer, Emily A. (2004). JavaScript For Dummies (4th ed.). Wiley Pub. ISBN 0-7645-7659-3 .
  • Watt, Andrew H.; Watt, Jonathan A.; Simon, Jinjer L. (2002). Teach Yourself JavaScript in 21 Days . Pearson Education. ISBN 0-672-32297-8 .
  • Zakas, Nicholas C. (2012). Professional JavaScript for Web Developers (3rd ed.). Wrox. ISBN 978-1-118-02669-4 .

Viungo vya nje