close

Javascript

Ugrás a navigációhoz Ugrás a kereséshez
javascript
Nem hivatalos JavaScript logó 2.svg
JavaScript screenshot.png
?
Általános információ
Gyakori bővítmények .js
Paradigma Multiparadigma , funkcionális programozás , [ 1 ] prototípus alapú programozás , kötelező , értelmezett ( scripting )
Megjelent 1995. december 4
Tervezte Netscape Communications , Mozilla Foundation
Legújabb stabil verzió ECMAScript 2021 (2021. június 1. (1 év, 4 hónap és 15 nap))
típusú rendszer gyenge, dinamikus, kacsa
megvalósítások SpiderMonkey , Rhino , KJS , JavaScriptCore , V8 , Chakra .
nyelvjárások ECMAScript
befolyásolta Java , Perl , Self , Python , C , Séma
befolyásolta ObjectiveJ, JScript .NET, TIScript

A JavaScript (általában rövidítve JS ) egy értelmezett programozási nyelv , az ECMAScript szabvány dialektusa . Objektumorientált , [ 2 ] prototípus alapú , imperatív, gyengén tipizált és dinamikusként definiálható .

Elsősorban kliensoldali használatú, egy webböngésző részeként valósítják meg, amely lehetővé teszi a felhasználói felület fejlesztését és a dinamikus weboldalakat [ 3 ] , valamint a szerveroldali JavaScriptet ( szerveroldali JavaScript vagy SSJS ). Használata a weben kívüli alkalmazásokban , például PDF dokumentumokban , asztali alkalmazásokban (többnyire widgetekben ) is jelentős.

2012 óta minden modern böngésző teljes mértékben támogatja az ECMAScript 5.1-et, a JavaScript egyik verzióját. A régebbi böngészők legalább az ECMAScript 3-at támogatják. A hatodik kiadás 2015 júliusában jelent meg. [ 4 ]

A JavaScriptet a C++- hoz és a Java - hoz hasonló szintaxissal tervezték , [ 5 ] ​[ 6 ] ​, bár átveszi a Java programozási nyelv neveit és konvencióit. A Java és a JavaScript szemantikája és célja azonban eltérő. Kapcsolatuk pusztán kereskedelmi jellegű, miután a Nestcape Navigatortól (a LiveScript megalkotója) megvásárolták a Java megalkotóját (Sun Microsystems), és megváltoztatták a programozási nyelv nevét.

Minden modern böngésző értelmezi a weboldalakba ágyazott JavaScript kódot. A weblapokkal való interakcióhoz a JavaScript nyelv a Dokumentumobjektum-modell (DOM) megvalósításával rendelkezik. A Javascript az egyetlen programozási nyelv, amelyet a böngészők natív módon megértenek.

Hagyományosan HTML weboldalakon használták műveletek végrehajtására, és csak a kliens alkalmazás keretein belül, a szerver funkciókhoz való hozzáférés nélkül . Jelenleg széles körben használják információk küldésére és fogadására a szerverről, más technológiák, például az AJAX segítségével . A JavaScriptet a felhasználói ügynök értelmezi, amikor az utasításokat a HTML kóddal együtt tölti le .

Az ECMAScript 1 szabvány 1997. júniusi megjelenése óta létezik a ma legszélesebb körben használt 2., 3. és 5. verzió (a 4-es verziót elvetették [ 7 ] ). 2015 júniusában az ECMAScript 6 verziót lezárták és közzétették [ 8 ] .

Előzmények

A JavaScript születése

A JavaScriptet eredetileg Brendan Eich , a Netscape -től fejlesztette Mocha néven , amelyet később LiveScript -re kereszteltek át , végül JavaScript lett. A névváltoztatás nagyjából egybeesett azzal az idővel, amikor a Netscape 1995 decemberében Java technológiai támogatást adott a Netscape Navigator webböngészőjéhez 2002-es verziójában. Az elnevezés zavart keltett, és azt a benyomást keltette, hogy a nyelv a Java kiterjesztése. marketingstratégiaként a Netscape számára, hogy presztízst szerezzen és innovációt fejlesszen ki az új webes programozási nyelvek területén. [ 9 ] [ 10 ]

A „JAVASCRIPT” az Oracle Corporation bejegyzett védjegye . [ 11 ] Licenc alapján használják a Netscape Communications és a jelenlegi szervezetek, például a Mozilla Foundation által létrehozott termékek . [ 12 ] [ 13 ]

A Microsoft a JavaScript nyelvjárását " JScript "-nek nevezte el, hogy elkerülje a márkaépítési problémákat. A JScriptet az Internet Explorer 1996 augusztusában kiadott 3.0-s verziójában vették át, és tartalmazta az Effect 2000 dátumfüggvények támogatását , ami eltér az akkoritól. A dialektusok annyira hasonlónak tűnhetnek, hogy a "JavaScript" és a "JScript" kifejezéseket gyakran felcserélhetően használják, de a JScript specifikáció sok szempontból nem kompatibilis az ECMA specifikációval.

Ezen inkompatibilitások elkerülése érdekében a World Wide Web Consortium megalkotta a Document Object Model (DOM, vagy spanyolul Document Object Model) szabványt, amely magában foglalja a Konquerort , az Internet Explorer és a Netscape Navigator 6-os verzióit , az Opera 7-es verzióját, a Mozilla Application Suite -ot és a Mozilla Firefoxot . első verziójától. [ idézet szükséges ]

1997-ben a szerzők azt javasolták [ 14 ] , hogy a JavaScriptet szabványként fogadja el az Európai Számítógépgyártók Szövetsége , az ECMA , amely a neve ellenére nem európai, hanem nemzetközi, genfi ​​székhelyű. 1997 júniusában ECMA-szabványként fogadták el, ECMAScript néven . Hamarosan ISO szabványként is .

JavaScript a szerver oldalon

A Netscape szerveroldali parancsfájl- megvalósítást vezetett be a Netscape Enterprise Serverrel , amely 1994 decemberében jelent meg (röviddel a JavaScript webböngészőknek való megjelenése után). [ 15 ] [ 16 ]​ A 2000-es évek közepétől kezdődően elterjedtek a szerveroldali JavaScript implementációk. A Node.js a szerveroldali JavaScript egyik figyelemre méltó példája, amelyet nagy projektekben használnak. [ 17 ] [ 18 ]

Későbbi fejlemények

A JavaScript az egyik legnépszerűbb és legszélesebb körben használt programozási nyelvvé vált az interneten. Eleinte azonban sok fejlesztő helytelenítette a nyelvet, mert a célközönsége többek között cikkkiadókból és más hobbiból állt. [ 19 ] Az Ajax érkezése újra előtérbe helyezte a JavaScriptet, és sok más programozó figyelmét is felkeltette. Ennek eredményeként az általános hatókörű keretrendszerek és könyvtárak elterjedtek, a JavaScript programozási gyakorlatok javultak, és a JavaScript használata a webböngészőkön kívül is megnövekedett , amint az a JavaScript-környezetek weboldali elterjedésével is látható. szerver . 2009 januárjában indult el a CommonJS projekt azzal a céllal, hogy egy könyvtárat adjon meg a közös feladatokhoz, elsősorban a webböngészőn kívüli fejlesztéshez. [ 20 ]

2015 júniusában az ECMAScript 6 szabványt lezárták és közzétették [ 21 ] ​[ 22 ]​ a böngészők közötti szabálytalan támogatással [ 23 ] ​, és amely olyan fejlett funkciókat biztosít a JavaScript számára, amelyek hiányoztak és gyakran használtak a JavaScriptben. Más nyelvek, mint pl. mint modulok a kódszervezéshez, valódi osztályok az objektumorientált programozáshoz , nyílkifejezések, iterátorok, generátorok vagy ígéretek az aszinkron programozáshoz.

Az ECMAScript 7-es verziója ECMAScript 2016 néven ismert [ 24 ] , és ez a legújabb verzió, amely 2016 júniusában jelent meg. Ez az első verzió, amely új éves kiadási eljárást és fejlesztési folyamatot használ. [ 25 ]

Jellemzők

A következő szolgáltatások közösek minden olyan megvalósításban, amely megfelel az ECMAScript szabványnak, hacsak kifejezetten másként nem rendelkezik.

Kötelező és strukturált

A JavaScript támogatja a C programozási struktúrájának nagy részét (például utasításokat , ciklusokat , utasításokat stb.). Egy figyelmeztetéssel, részben: C-ben a változók hatóköre arra a blokkra vonatkozik, amelyben meghatározták őket; a JavaScript azonban nem támogatja ezt, mivel a változók hatóköre annak a függvénynek a hatóköre, amelyben deklarálták őket. Ez megváltozik az ECMAScript 2015 kiadással, mivel támogatja a blokk hatókörét a kulcsszó segítségével . A C-hez hasonlóan a JavaScript is különbséget tesz a kifejezések és az utasítások között. A C-hez képest szintaktikai különbség a pontosvesszők automatikus beillesztése, vagyis a JavaScriptben a mondatot lezáró pontosvessző elhagyható. [ 26 ] ifforswitchlet

Dinamikus

dinamikus gépelés
A legtöbb szkriptnyelvhez hasonlóan a típus az értékhez van kötve, nem a változóhoz. Például xelőfordulhat, hogy egy változó egy időben egy számhoz kötődik, majd később egy karakterlánchoz térhet vissza . A JavaScript számos módot támogat egy objektum típusának ellenőrzésére, beleértve a kacsa gépelést is . [ 27 ] Az egyik módja a kiderítésnek a kulcsszó segítségével typeof.
tárgyilagos
A JavaScript szinte teljes egészében objektumokból áll . A JavaScriptben található objektumok asszociatív tömbök , amelyeket prototípusok beépítésével javítanak (lásd alább). Az objektumtulajdonságok nevei a string: típusú kulcsok, obj.x = 10és obj['x'] = 10egyenértékűek, a pontjelölés szintaktikai cukor . A tulajdonságok és értékeik futás közben létrehozhatók, módosíthatók vagy törölhetők. Egy objektum legtöbb tulajdonsága (és azok, amelyek a prototipikus öröklődési láncban szerepelnek) felsorolható a ciklusutasításon keresztül for... in. A JavaScript néhány előre definiált objektumot tartalmaz, például Functionés Date.
Futásidejű értékelés
A JavaScript magában foglalja a evalkarakterláncokként kifejezett kifejezések futási időben történő kiértékelésének lehetőségét. Emiatt ajánlott evalkörültekintően használni, és a lehető legtöbbet használni a funkciót JSON.parse(), mivel sokkal biztonságosabb lehet.

Funkcionális

Első osztályú funkciók
A funkciókat gyakran nevezik első osztályú állampolgároknak; önmagukban tárgyak. Mint ilyenek, olyan tulajdonságokkal és módszerekkel rendelkeznek, mint például .call()és .bind(). [ 28 ]​ A beágyazott függvény egy másikban meghatározott függvény. Ez a külső függvény minden egyes meghívásakor létrejön. Ezenkívül minden létrehozott függvény egy lezárást képez ; egy olyan hatókör kiértékelésének eredménye, amely egy vagy több változót tartalmaz, amelyek egy másik külső hatókörtől függenek, beleértve a konstansokat, a helyi változókat és a hívó külső függvény argumentumait. A bezárás kiértékelésének eredménye az egyes függvényobjektumok belső állapotának része, még azután is, hogy a külső függvény befejezte az értékelést. [ 29 ]

Prototipikus

prototípusok
A JavaScript osztályok helyett prototípusokat használ az öröklődés használatához . [ 30 ] Lehetőség van az osztályok által biztosított számos funkció emulálására a hagyományos objektum-orientált nyelveken JavaScript prototípussal. [ 31 ]
Objektumkonstruktorként funkcionál
A függvények konstruktorként is viselkednek. A függvényhívás előtagja a kulcsszóval newhozzon létre egy prototípus új példányát, amely örökli a konstruktor tulajdonságait és metódusait (beleértve a prototípus tulajdonságait is Object). [ 32 ] Az ECMAScript 5 biztosítja a módszert Object.create, amely lehetővé teszi egy példány explicit létrehozását anélkül, hogy automatikusan örökölnie kellene az objektum prototípusát (régebbi környezetekben a létrehozott objektum prototípusa ként jelenhet meg null). [ 33 ] A prototypekonstruktor tulajdonság határozza meg az újonnan létrehozott objektumok belső prototípusához használt objektumot. Új metódusok adhatók hozzá a konstruktorként használt objektum prototípusának módosításával. A JavaScriptben előre definiált konstruktoroknak, például az Arrayu Object-nak is vannak prototípusai, amelyek módosíthatók. Bár ez lehetséges, helytelen gyakorlatnak tekinthető a prototípus módosítása, Objectmivel a Javascript legtöbb objektuma örökli az objektum metódusait és tulajdonságait, az objektumok prototypepedig számíthatnak arra, hogy nem módosították őket. [ 34 ]

Egyéb funkciók

Futási környezet
A JavaScript jellemzően attól függ, hogy milyen környezetben fut (például egy webböngészőben ), hogy olyan objektumokat és módszereket biztosítson, amelyek segítségével a szkriptek kölcsönhatásba léphetnek a „külvilággal”. Valójában a környezettől függ, hogy képes-e szkriptek beillesztésére vagy importálására (például HTML -ben a címkén keresztül <script>). (Ez nem egy nyelvi funkció, de a legtöbb JavaScript-megvalósításban közös.)
variadic függvények
A függvénynek korlátlan számú paraméter adható át. A függvény a paramétereken keresztül vagy a helyi objektumon keresztül is elérheti őket arguments. A variadic függvények a segítségével is létrehozhatók .apply().
Módszerként funkcionál
Sok objektum-orientált nyelvtől eltérően nincs különbség a függvénydefiníció és a metódusdefiníció között . A megkülönböztetés inkább a függvényhívás során történik; függvényt metódusként hívhatunk. Amikor egy függvényt egy objektum metódusaként hívunk meg, a kulcsszó this, amely a függvény helyi változója, a függvényt meghívó objektumot jelöli.
A tömbök és az objektumok szó szerinti meghatározása
Sok szkriptnyelvhez hasonlóan tömbök és objektumok ( más nyelveken asszociatív tömbök ) is létrehozhatók rövidített szintaxissal. Valójában ezek a literálok képezik a JSON adatformátum alapját .
Reguláris kifejezések
A JavaScript a Perlhez hasonló módon támogatja a reguláris kifejezéseket is , amelyek tömör és hatékony szintaxist biztosítanak a szövegkezeléshez, amely kifinomultabb, mint a karakterlánc-objektumokba épített függvények. [ 35 ]

Gyártó-specifikus kiterjesztések

A JavaScript hivatalosan a Mozilla Foundation szervezete alá tartozik , és rendszeresen új nyelvi funkciókat adnak hozzá. Azonban csak néhány JavaScript-motor támogatja ezeket a funkciókat:

  • A getés tulajdonságok (a WebKit, Opera, [ 36 ]​ ActionScript és Rhino setáltal is támogatott ). [ 37 ]
  • Feltételes kitételek catch.
  • A Pythonból átvett iterátor protokoll .
  • A korutinok szintén a Pythonból lettek átvéve.
  • Listák és kifejezések generálása szövegértés útján, szintén a Pythonból.
  • Állítsa be a kulcsszóval blokkolandó hatókört let.
  • Tömbök és objektumok strukturálása (a mintaillesztés korlátozott formája).
  • Konkrét kifejezések függvényekben (function(args) expr).
  • ECMAScript for XML (E4X), egy kiterjesztés, amely natív XML támogatást ad az ECMAScripthez.

Szintaxis és szemantika

a nyelv legújabb verziója az ECMAScript 2016, amely 2016. június 17-én jelent meg [ 38 ]

Egyszerű példák

A JavaScript változói a var kulcsszóval vannak definiálva : [ 39 ]

var  x ;  // definiálja az x változót, bár alapértelmezés szerint nincs hozzárendelve értéke 
var  y  =  2 ;  // definiáljuk az y változót, és hozzárendeljük a 2-es értéket

Tekintsük a fenti példában szereplő megjegyzéseket , amelyeket 2 perjel előz meg.

A nyelv nem tartalmaz I/O funkciókat; a futási környezet már biztosítja. Az ECMAScript specifikáció az 5.1-es kiadásában a következőket említi: [ 40 ]

...valóban, ebben a specifikációban nincsenek rendelkezések külső adatbevitelre vagy -kimenetre a számított eredményekhez.

A legtöbb futásidejű környezet azonban rendelkezik egy meghívott objektummal [ 41 ]console ​, amelyet a hibakereső konzol kimeneti adatfolyama nyomtathat. Íme egy egyszerű program, amely kiírja a „Hello world!” szöveget:

konzol . log ( "Helló világ!" );

Egy rekurzív függvény :

function  factorial ( n )  { 
    if  ( n  ===  0 )  { 
        return  1 ; 
    } 
    return  n  *  faktoriális ( n  -  1 ); 
}

Példák anonim függvényre (vagy lambda függvényre ) és lezárásra:

var  displayClosure  =  function ()  { 
    var  count  =  0 ; 
    return  függvény  ()  { 
        return  ++ count ; 
    }; 
} 
var  inc  =  displayClosure (); 
inc ();  // 1 
inc -t ad vissza ();  // 2 
inc -t ad vissza ();  // visszatérés 3

Az önmeghívó kifejezések lehetővé teszik a függvények számára, hogy paraméterenként változókat adjanak át neki a saját lezárásukon belül.

var  v ; 
v  =  1 ; 
var  getValue  =  ( function ( v )  { 
  return  function ()  { return  v ;}; 
}( v ));

v  =  2 ;

getValue ();  1

Haladóbb példák

A következő kód a JavaScript különféle funkcióit mutatja be.

/* Két szám legkisebb közös többszörösének (LCM) megkeresése */ 
function  LCMCalculator ( x ,  y )  {  // konstruktor function 
    var  checkInt  =  function  ( x )  {  // belső függvény 
        if  ( x  %  1  !==  0 )  { 
            throw  new  TypeError ( x  +  " nem egész szám" );  // kivételt dob 
        ​​} 
        return  x ; 
    }; 
    ezt . a  =  checkInt ( x ) //  a pontosvessző nem kötelező 
    . b = checkInt ( és ); } // A konstruktor által létrehozott objektumpéldányok prototípusa a konstruktor "prototype" tulajdonságának prototípusa. LCMC számológép . prototípus = { // literális konstruktorként definiált objektum : LCMCalculator , // amikor újra hozzárendelünk egy prototípust, akkor helyesen állítottuk be a konstruktor tulajdonságát gcd : function () { // a legnagyobb közös tényezőt kiszámító metódus // Euklidész algoritmusa: var a = Matek . abs ( ez . a ), b = Math . abs ( ez . b ), t ; if ( a < b ) { // változók felcserélése t = b ; b = a ; a = t ; } while ( b !== 0 ) { t = b ; b = a % b ; a = t ; } // A GCF-et csak egyszer kell kiszámítanunk, ezért „újradefiniáljuk” ezt a módszert. // (Nem igazán felülírás – magán a példányon van definiálva, így // ez.gcd erre a „felülírásra” hivatkozik, nem pedig az LCMCalculator.prototype.gcd-re). // Továbbá 'gcd' === "gcd", this['gcd'] === this.gcd this [ 'gcd' ] = function () { return a ; }; visszatérés ide : ; }, // Az objektumtulajdonságnevek egyszeres idézőjelekkel (') vagy idézőjelekkel (“) elválasztott karakterláncokkal adhatók meg. "lcm" : function () { // A változónevek nem ütköznek az objektum tulajdonságaival. Például: |lcm| nem |ez.lcm|. // Ne használja a |this.a * this.b|-t hogy elkerüljük a lebegőpontos számításokkal kapcsolatos problémákat. var lcm = ez . erre / erre . gcd () * ez . b ; // Az LCM-et csak egyszer kell kiszámítanunk, ezért "újradefiniáljuk" ezt a módszert. ezt . lcm = függvény () { return lcm ; }; return lcm ; }, toString : function () { return "LCMCalculator: a = " + this . a + ", b = " + ez . b ; } };  


   
      
        
        
               
            
            
              
              
              
        
            
              
                
              
        
        
        
        
        
            
             
        
         
    
    
        
        
        
               
        
            
             
        
         
    
       
               
    


// Meghatározunk egy általános függvényt az eredmény kinyomtatására; ez a megvalósítás csak a webböngészők 
függvény  kimenetében működik ( x )  { 
    document . test . appendChild ( document . createTextNode ( x )); 
    dokumentumot . test . appendChild ( document . createElement ( 'br' )); 
}

// Megjegyzés: Az Array prototípus .map() és .forEach() metódusai a JavaScript 1.6-ban vannak definiálva. 
// Ezeket a módszereket itt a nyelv inherens funkcionális természetének bemutatására használjuk. 
[[ 25 ,  55 ],  [ 21 ,  56 ],  [ 22 ,  58 ],  [ 28 ,  56 ]]. map ( függvény  ( pár )  {  // egy Array + leképezési függvény literális felépítése. 
    return  new  LCMCalculator ( pár [ 0 ],  pár [ 1 ]); 
}). sort ( függvény  ( a ,  b )  {  // a gyűjtemény rendezése ezzel a függvénnyel 
    return  a . lcm ()  -  b . lcm (); 
}). forEach ( függvény  ( obj )  { 
    kimenet ( obj  +  ", gcd = "  +  obj . gcd ()  +  ", lcm = "  +  obj . lcm ()); 
});

A következő példa azt a kimenetet mutatja be, amelyet a böngészőablakban kell megjeleníteni.

LCMC számológép: a = 28, b = 56, gcd = 28, lcm = 56
LCMC számológép: a = 21, b = 56, gcd = 7, lcm = 168
LCMC számológép: a = 25, b = 55, gcd = 5, lcm = 275
LCMC számológép: a = 22, b = 58, gcd = 2, lcm = 638

Használat weboldalakon

A JavaScript legáltalánosabb használata olyan függvények írása, amelyek HTML-oldalakba vannak beágyazva, és kölcsönhatásba lépnek az oldal dokumentumobjektum-modelljével (DOM). Néhány egyszerű példa erre a felhasználásra:

  • Töltsön fel új tartalmat az oldalhoz, vagy küldjön adatokat a szervernek AJAX-on keresztül az oldal újratöltése nélkül (például egy közösségi hálózat lehetővé teheti a felhasználó számára, hogy állapotfrissítéseket küldjön az oldal elhagyása nélkül).
  • Az oldalelemek animálása, eltűntetése, átméretezése, áthelyezése stb.
  • Interaktív tartalom, például játékok, valamint audio- és videolejátszás.
  • A webes űrlap bemeneti értékeinek ellenőrzése annak érdekében, hogy azok elfogadhatók legyenek, mielőtt elküldik a szerverre.
  • A felhasználók olvasási szokásairól és böngészési tevékenységeiről szóló információk továbbítása különböző weboldalakra. A weboldalak ezt gyakran webelemzési, hirdetéskövetési, személyre szabási vagy egyéb célokra teszik. [ 42 ]

Mivel a JavaScript-kód helyileg is végrehajtható a felhasználó böngészőjében (nem pedig távoli szerveren), a böngésző gyorsan reagál a felhasználói műveletekre, így az alkalmazás reagálóbbá válik. Másrészt a JavaScript kód képes észlelni a felhasználói műveleteket, amelyeket a HTML önmagában nem tud, például a billentyűleütéseket. Az olyan alkalmazások, mint a Gmail , kihasználják ezt: a felhasználói felület logikájának nagy része JavaScriptben van írva, és kéréseket küld a szervernek (például egy e-mail üzenet tartalmát). Az Ajax programozás használatának növekvő tendenciája hasonlóan kihasználja ezt a technikát.

A JavaScript motor (más néven JavaScript értelmező vagy JavaScript implementáció) egy olyan tolmács, amely értelmezi a JavaScript forráskódját, és ennek megfelelően végrehajtja a szkriptet. Az első JavaScript motort Brendan Eich készítette a Netscape Communications Corporation-től a Netscape Navigator webböngészőhöz. A SpiderMonkey nevű motor C-ben van megvalósítva. Azóta frissítették (JavaScript 1.5-ben), hogy megfeleljen az ECMA-262 3. kiadásának. Az elsősorban Norris Boyd (korábban Netscape, jelenleg a Google) által létrehozott Rhino motor egy JavaScript implementációja Java nyelven . A Rhino, akárcsak a SpiderMonkey, kompatibilis az ECMA-262 3. kiadással.

A webböngésző messze a legelterjedtebb tárhely a JavaScript számára. A webböngészők gyakran hoznak létre nem natív, futási időtől függő objektumokat a dokumentumobjektum-modell (DOM) megjelenítésére a JavaScriptben. A webszerver egy másik gyakori szolgáltatási környezet. A JavaScript webszerver jellemzően saját objektumait teszi közzé HTTP kérés- és válaszobjektumként, amelyeket aztán egy JavaScript-program lekérdezhet és manipulálhat weboldalak dinamikus létrehozása érdekében.

Mivel a JavaScript az egyetlen nyelv, amelyen a legtöbb népszerű böngésző megosztja a támogatást, ez olyan nyelv lett, amelyre sok más nyelvű keretrendszer lefordítja, bár a JavaScriptet nem ilyen célokra tervezték. [ 43 ] A dinamikus természetéből adódó teljesítménykorlátok ellenére a JavaScript-motorok megnövekedett sebessége ezt a nyelvet meglepően megvalósítható fordítási környezetté tette.

Szkriptpélda

Íme egy rövid példa egy weboldalra (amely megfelel a HTML5 szabvány szabványainak ), amely JavaScriptet használ a DOM -kezeléshez :

<!DOCTYPE html> 
< html > 
< head > 
    < meta  charset = "utf-8" > 
    < title > Egyszerű példa </ title > 
</ head > 
< body > 
    < h1  id = "header" > Ez a JavaScript </ h1 >

    < script > 
        dokumentum . test . appendChild ( document . createTextNode ( 'Hello World!' ));
    
        var  h1  =  dokumentum . getElementById ( 'fejléc' );  // tartalmazza a hivatkozást a <h1> címkére 
        h1  =  document . getElementsByTagName ( 'h1' )[ 0 ];  // ugyanannak a <h1> elemnek 
    </ script > elérése

    < noscript > Böngészője nem támogatja a JavaScriptet, vagy a JavaScript le van tiltva. </ noscript > 
</ body > 
</ html >

Kompatibilitási szempontok

Mivel a JavaScript nagyon sokféle környezetben fut, a tesztelés és a hibakeresés fontos része annak tesztelése és ellenőrzése, hogy a JavaScript-kód megfelelően működik-e több böngészőben. A weboldalak elérésére és kezelésére szolgáló DOM felület nem része az ECMAScript szabványnak vagy magának a JavaScript-nek. A DOM-ot a W3C , egy független szervezet szabványosítási erőfeszítései határozzák meg . A gyakorlatban a JavaScript különböző böngészők implementációi eltérnek egymástól és a szabvány szabványaitól is.

E különbségek kiküszöbölése érdekében a JavaScript szerzői képesek voltak olyan szabványoknak megfelelő kódot írni, amely a legtöbb böngészőben is megfelelően futna, vagy ennek hiányában legalább olyan kódot írhattak, amely képes ellenőrizni bizonyos böngészőfunkciók meglétét, és azt, hogy másképp viselkedik, ha azt mondják. funkció nem elérhető. [ 44 ] Vannak esetek, amikor két böngésző képes megvalósítani ugyanazt a funkciót, de eltérő viselkedéssel. Ez a tény segíthet a programozóknak abban, hogy felismerjék, melyik böngésző fut az adott pillanatban, és így módosíthatja az írás viselkedését. [ 45 ] ​[ 46 ]​ A programozók gyakran használnak olyan könyvtárakat vagy eszközöket is, amelyek figyelembe veszik a böngészők közötti különbségeket.

Ezenkívül előfordulhat, hogy a szkriptek egyes felhasználóknál nem működnek. Például egy felhasználó:

  • Régebbi böngésző használata teljes DOM API támogatás nélkül,
  • Használjon olyan PDA-t vagy mobiltelefon-böngészőt, amely nem tudja futtatni a JavaScriptet
  • Biztonsági óvintézkedésként tiltsa le a JavaScript végrehajtását,
  • Hangböngésző használata például látássérülés miatt.

E felhasználók támogatására a webfejlesztők gyakran hibatűrő oldalakat hoznak létre a JavaScriptet nem támogató felhasználói ügynök (böngésző típus) alapján. Az oldalnak különösen hasznosnak kell lennie a JavaScript által hozzáadott további szolgáltatások nélkül. Alternatív megoldás, amelyet sokan előnyben részesítenek, az, hogy először olyan technológiákkal hoznak létre tartalmat, amelyek minden böngészőben működnek, és javítják a tartalmat azon felhasználók számára, akik engedélyezték a JavaScriptet.

Kisegítő lehetőségek

Feltételezve, hogy a felhasználó nem tiltotta le a JavaScript kód végrehajtását, a kliens oldalon JavaScriptet kell írni egyrészt a látási vagy fizikai fogyatékkal élő látogatók élményének javítása, másrészt az információk elrejtésének elkerülése érdekében. [ 47 ]

A vakok és gyengénlátók által használt képernyőolvasókat a JavaScript figyelembe tudja venni, és így képes elérni és olvasni az oldal DOM-elemeit. Az írott HTML-kódnak a lehető legtömörebbnek, navigálhatóbbnak és szemantikailag gazdagnak kell lennie, függetlenül attól, hogy a JavaScript fut-e vagy sem.

A JavaScript nem függhet teljes mértékben a böngésző egér eseményeitől, és elérhetőnek kell lennie azoknak a felhasználóknak, akik nem akarnak az egeret (számítógépet) használni a navigációhoz, vagy akik csak a billentyűzet használatát választják. Vannak olyan eszközfüggetlen események, mint például onfocusés onchangeamelyek a legtöbb esetben előnyösebbek. [ 47 ]

A JavaScript nem használható arra, hogy zavart keltsen a webfelhasználóban. Például a böngésző normál funkcióinak módosítása vagy letiltása, például a visszanavigáció gomb vagy a frissítési esemény viselkedésének megváltoztatása olyan gyakorlatok, amelyeket általában legjobb elkerülni. Hasonlóképpen, ha olyan eseményeket indítanak el, amelyekről a felhasználó nem tud, az csökkenti a felhasználó kontrollérzetét, és váratlan változásokat okoz az oldal tartalmában. [ 48 ]

Gyakran az a folyamat, hogy egy összetett weboldalt a lehető legmagasabb fokú hozzáférhetőséggel hoznak létre, nem triviális problémává válik, ahol sok kérdés kerül megvitatásra és véleményezésre, amely mindenkitől a végsőkig tartó elkötelezettséget követeli meg. A fogyatékkal élők számára készült felhasználói ágensek és kisegítő technológiák azonban folyamatosan fejlődnek, és továbbra is új iránymutatások és információk kerülnek fel az internetre. [ 47 ]

Biztonság

A JavaScript és a DOM lehetővé teszi a programozók számára, hogy visszaéljenek vele olyan szkriptek bevezetésére, amelyek rosszindulatú tartalommal rendelkező kódot hajtanak végre a felhasználó beleegyezése nélkül, így veszélyeztetve a felhasználók biztonságát.

A böngészőfejlesztők ezt a kockázatot két korlátozás alkalmazásával veszik figyelembe. Először is, a szkriptek egy homokozóban futnak, ahol csak a webhez kapcsolódó műveletek hajthatók végre, általános célú programozási feladatok, például fájlkészítés nem. Másodszor, ugyanaz a származási politika korlátozza: az egyik webhelyről származó szkriptek nem férnek hozzá egy másik webhelyre (másik domainről) küldött információkhoz, például felhasználónevekhez, jelszavakhoz vagy cookie-khoz. A legtöbb JavaScript biztonsági hiba e két korlátozás valamelyikének megsértésével kapcsolatos.

Vannak olyan projektek, mint az AdSafe vagy a Secure ECMA script (SES), amelyek magasabb szintű biztonságot nyújtanak, különösen a harmadik felek által létrehozott kódban (például hirdetések). [ 49 ] [ 50 ]

A tartalombiztonsági szabályzat (CSP) az elsődleges módszer annak biztosítására, hogy csak megbízható kódot lehessen végrehajtani egy weboldalon.

Webhelyek közötti sebezhetőségek

A JavaScript gyakori biztonsági problémája a webhelyek közötti szkriptelés vagy az XSS, amely megsérti az azonos eredetre vonatkozó irányelvet. Az XSS biztonsági rések lehetővé teszik a támadók számára, hogy JavaScript-kódot fecskendezzenek be a felhasználó által meglátogatott weboldalakra. Ilyen lehet egy bank webhelye, ahol a támadó az áldozat jogosultságaival hozzáférhet a banki alkalmazáshoz, amely titkos információkat tárhat fel, vagy pénzt utalhat át az áldozat engedélye nélkül. Az XSS sebezhetőségeinek egyik megoldása a HTML-kihagyás használata, amikor nem megbízható forrásokból származó információkat jelenítenek meg.

Egyes böngészők részleges védelmet tartalmaznak a tükröződő XSS-támadások ellen (a támadó ugyanabban a webes kérésben van). A támadó rosszindulatú kódot tartalmazó URL-t ad meg. Azonban még a böngésző felhasználók is sebezhetőek más XSS-támadásokkal szemben, például olyanokkal szemben, amelyekben rosszindulatú kódot tárolnak egy adatbázisban. Csak a webalkalmazások szerveroldali megfelelő kialakítása képes teljesen megakadályozni az XSS-t. XSS biztonsági rések a böngészőfejlesztők végrehajtási hibái miatt is előfordulhatnak. [ 51 ]

Egy másik biztonsági rés a helyek közötti kérés hamisítása vagy a CSRF. A CSRF-ben a támadó webhely kódja becsapja az áldozat böngészőjét, lehetővé téve a támadó számára, hogy kéréseket tegyen az áldozat nevében, ami lehetetlenné teszi, hogy a célalkalmazás (például egy pénzátutalást végző bank) tudja, hogy a kérést önkéntesen nyújtották-e be. a felhasználó vagy egy CSRF támadás.

A támadás azért működik, mert ha a céloldal csak cookie-kat használ az áldozatkérések hitelesítésére, a támadó kódja által kezdeményezett kérések ugyanazokkal a hiteles hozzáférési adatokkal rendelkeznek, mint a felhasználó által kezdeményezett kérések.

Általánosságban elmondható, hogy a CSRF megoldása egy rejtett űrlapmező bevezetése, amelynek értéke a hitelesítés végrehajtására szolgál, nem csak cookie-kon keresztül, olyan kérések esetén, amelyeknek tartós hatásai lehetnek. A HTTP hivatkozás fejlécének ellenőrzése is segíthet.

A „JavaScript-eltérítés” a CSRF-támadások egy olyan típusa, amelyben a támadó webhelyén található <script> címke kihasználja az áldozat webhelyének oldalán található biztonsági rést, amely miatt az oldal JSON- vagy JavaScript-kód formájában privát információkat ad vissza. A lehetséges megoldások a következők:

  • hogy a POST és GET kérések paramétereiben hitelesítési jogkivonatot kell megadni azokhoz a kérésekhez, amelyek privát felhasználói információk visszaküldését igénylik.
  • használja a POST-ot, és soha ne GET-et olyan kérések esetén, amelyek személyes adatokat adnak vissza

Fejlesztő eszközök

A JavaScriptben a hibakereső szükségessé válik nagy, nem triviális alkalmazások fejlesztésekor. Mivel a különböző böngészők között lehetnek eltérések a megvalósításban (különösen a DOM tekintetében), hasznos, ha minden böngészőhöz hozzá kell férni egy hibakeresőhöz, amelyet webalkalmazásunk megcéloz. [ 52 ]

A webes hibakeresők Internet Explorer, Firefox, Safari, Google Chrome és Opera számára érhetők el. [ 53 ]

Az Internet Explorerhez három hibakereső érhető el : a Microsoft Visual Studio a legfejlettebb a három közül, amelyet szorosan követ a Microsoft Script Editor (a Microsoft Office egyik összetevője ) [ 54 ] és végül a Microsoft Script Debugger, amely sokkal alaposabb, mint a másik. kettő, bár ingyenes. Az ingyenes Microsoft Visual Web Developer Express IDE a Microsoft Visual Studio JavaScript hibakereső funkciójának korlátozott verzióját kínálja. Az Internet Explorer a 8-as verzió óta tartalmaz fejlesztői eszközöket (az F12 billentyű lenyomásával jelenik meg). A Firefox webalkalmazásai a Firebug -bővítmény vagy a régi Venkman hibakereső segítségével hibakereshetők. A Firefox egy alapvető hibakonzollal is rendelkezik, amely naplózza és kiértékeli a JavaScriptet. A CSS hibákat és figyelmeztetéseket is naplózza . Az Opera tartalmaz egy Dragonfly nevű eszközkészletet. [ 55 ] A WebKit Web Inspector tartalmaz egy JavaScript hibakeresőt [ 56 ] , amelyet a Safariban használnak, valamint a Google Chrome módosított verzióját .

Létezik néhány hibakereső segédeszköz, amelyek szintén JavaScriptben vannak írva, és az interneten való futtatásra készültek. Példa erre a JSLint program , amelyet Douglas Crockford fejlesztett ki , aki sokat írt a nyelvről. A JSLint úgy elemzi a JavaScript kódot, hogy az megfeleljen a szabványoknak és irányelveknek a megfelelő működés és karbantarthatóság biztosítása érdekében.

Lásd még

Hivatkozások

  1. Douglas Crockford a funkcionális JavaScriptről (2:49): "A [JavaScript] a legnépszerűbb funkcionális nyelv a világon. A JavaScript funkcionális programozási nyelv, és mindig is volt, legalábbis az [verzió] 1.2 óta."
  2. ^ "Archivált másolat" . Archiválva az eredetiből 2015. április 12-én . Letöltve 2010-11-23 . 
  3. M. Domínguez-Dorado,. Minden programozás. No. 12. Oldalak. 48-51. Szerkesztői Iberprensa (Madrid). DL M-13679-2004. 2005. szeptember. Kliensoldali adatbázisok JavaScript DB-vel . 
  4. ^ "JavaScript" . Mozilla fejlesztői hálózat . Letöltve: 2016. szeptember 16 . 
  5. «A JavaScriptről - JavaScript | MDN» . developer.mozilla.org (amerikai angol nyelven) . Letöltve: 2022. július 4 . 
  6. ^ "Bevezetés" . web.stanford.edu . Letöltve: 2022. július 4 . 
  7. Eich, Brendan (2008. augusztus 13.). ECMAScript Harmony . Letöltve: 2015. július 22 . 
  8. campusMVP (2015. június 19.). "Az ECMAScript 6 ma már zárt szabvány" . Letöltve: 2015. július 22 . 
  9. Az interneten és a világhálón (WWW) használt programozási nyelvek (spanyol)
  10. JavaScript: The Definitive Guide, 6. kiadás
  11. http://tsdr.uspto.gov/#caseNumber=75026640&caseType=SERIAL_NO&searchType=statusSearch
  12. Oracle védjegyek .
  13. "A JavaScriptről " . Letöltve: 2013. augusztus 29 . "A JavaScript az Oracle védjegye vagy bejegyzett védjegye az Egyesült Államokban és más országokban." 
  14. Netscape sajtóközlemény (spanyol)
  15. "2. fejezet: Kezdő lépések" . Szerveroldali JavaScript útmutató . Netscape Communications Corporation. 1998 . Letöltve: 2012-04-25 . 
  16. Mike Morgan (1996). "6. fejezet: Netscape Internet Application Framework" . A Netscape™ LiveWire™ Special Edition használata . Hogy. Archiválva az eredetiből 2012. december 21-én . Letöltve: 2013. május 19 . 
  17. "Szerveroldali Javascript: Bosszúval visszatérve" . Olvassa el a Write Web című részt . 2009. december 17. Az eredetiből archiválva: 2012. június 2 . Letöltve: 2012. május 28 . 
  18. ^ "A Node célja, hogy egyszerű módot biztosítson skálázható hálózati programok létrehozására" . A Node.js-ről . Joyent. 
  19. "JavaScript: A világ leginkább félreértett programozási nyelve" . crockford.com . Letöltve: 2009. május 19 . 
  20. Kris Kowal (2009. december 1.). "A CommonJS erőfeszítése a JavaScriptet a világuralom útjára állítja" . Ars Technica . Conde Nast kiadványok . Letöltve: 2010. április 18 . 
  21. ECMA International (2015. június). "Standard ECMA-262 6. kiadás" . 
  22. campusMVP (2015. június 19.). "Az ECMAScript 6 már zárt szabvány" . Letöltve: 2015. július 22 . 
  23. ^ "ECMAScript 6 böngésző kompatibilitási táblázat (angol)" . 
  24. ECMA International (2016. június). "Standard ECMA-262 7th Edition" . 
  25. ECMA International (2016. június). "ECMAScript 2016 nyelvi specifikáció" . 
  26. Flanagan, 2006 , p. 16.
  27. Flanagan, 2006 , p. 176–178.
  28. A függvényobjektum tulajdonságai
  29. Flanagan, 2006 , p. 141.
  30. ^ "Öröklés és a prototípus lánc" . Mozilla fejlesztői hálózat . Mozilla . Letöltve: 2013. április 6 . 
  31. Herman, David (2013). Hatékony Javascript . Addison-Wesley. p. 83. ISBN  9780321812186 . 
  32. Haverbeke, Marjin (2011). Sokatmondó Javascript . Nem keményítőprés. pp. 95-97 . ISBN  9781593272821 . 
  33. Katz, Yehuda. "A "Prototípusok" értelmezése JavaScriptben" . Letöltve: 2013. április 6 . 
  34. Herman, David (2013). Hatékony Javascript . Addison-Wesley. pp. 125-127. ISBN  9780321812186 . 
  35. Haverbeke, Marijn (2011). Sokatmondó JavaScript . Nem keményítőprés. pp. 139-149 . ISBN  978-1593272821 . 
  36. Robert Nyman, Getters And Setters With JavaScript – Code Samples And Demos , közzétéve 2009. május 29-én, elérve 2010. január 2-án.
  37. John Resig, JavaScript Getters and Setters , 2007. július 18., elérve 2010. január 2.
  38. http://www.ecma-international.org/publications/standards/Ecma-262.htm
  39. ^ "var - JavaScript - MDN" . A Mozilla fejlesztői hálózat . Letöltve: 2012. december 22 . 
  40. ^ "ECMAScript nyelvi specifikáció - ECMA-262 Edition 5.1" . Ecma International . Letöltve: 2012. december 22 . 
  41. ^ "konzol" . Mozilla fejlesztői hálózat . Mozilla . Letöltve: 2013. április 6 . 
  42. "JavaScript követés - Piwik" . Piwik . Archiválva az eredetiből 2013. október 31-én . Letöltve: 2012. március 31 . 
  43. Hamilton, Naomi (2008. június 31.). "A programozási nyelvek A-Z-je: JavaScript" . computerworld.com.au. 
  44. Peter-Paul Koch, Tárgyérzékelés
  45. Peter-Paul Koch, Lehetetlen küldetés – egérpozíció
  46. Peter-Paul Koch, Böngésző észlelése
  47. abc Flanagan , 2006 , pp. 262–263.
  48. "Hozzáférhető JavaScript létrehozása" . WebAIM . Letöltve: 2010. június 8 . 
  49. ADsafe – A JavaScript biztonságossá tétele a hirdetések számára
  50. Biztonságos ECMA szkript (SES)
  51. MozillaZine, Mozilla Cross-Site Scripting biztonsági rést jelentett és javított
  52. "Speciális hibakeresés JavaScripttel" . alistapart.com. 2009. február 3 . Letöltve: 2010. május 28 . 
  53. "A JavaScript hibakereső konzol" . javascript.about.com. 2010. május 28 . Letöltve: 2010. május 28 . 
  54. JScript-fejlesztés Microsoft Office 11-ben (MS InfoPath 2003)
  55. "DragonFly Opera" . Opera szoftver. Archiválva az eredetiből 2011. augusztus 22-én . Letöltve: 2013. május 19 . 
  56. ^ "Bemutatkozik a Drosera - Surfin' Safari" . Webkit.org. 2006. június 28 . Letöltve: 2009. május 19 . 

Külső linkek