JavaScript: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Mecha (discussione | contributi)
aggiunto template "aggiornare"
LRKalle (discussione | contributi)
Nessun oggetto della modifica
Riga 25:
Tali funzioni di script, utilizzati dunque nella ''[[front-end|logica di presentazione]]'', possono essere opportunamente inserite in [[file]] [[HTML]], in pagine [[JavaServer Pages|JSP]] o in appositi file separati con [[Estensione (file)|estensione]] ''.js'' poi richiamati nella ''[[logica di business]]''. Ultimamente il suo campo di utilizzo è stato esteso alle cosiddette ''Hybrid App'' (app ibride), con le quali è possibile creare [[app (smartphone)|app]] per più [[sistema operativo|sistemi operativi]] utilizzando un unico [[codice sorgente]] basato appunto su JavaScript, [[HTML]] e [[CSS]].
 
Fu originariamente sviluppato da [[Brendan Eich]] della [[Netscape Communications]] con il nome di '''Mochan''' e successivamente di '''LiveScript''', ma in seguito è stato rinominato "JavaScript" ed è stato formalizzato con una [[sintassi]] più vicina a quella del linguaggio [[Java (linguaggio di programmazione)|Java]] di [[Sun Microsystems]] (che nel 2010 è stata acquistata da [[Oracle Corporation|Oracle]]). JavaScript è stato [[Norma tecnica|standardizzato]] per la prima volta il [[1997]] dalla [[European Computer Manufacturers Association|ECMA]] con il nome '''ECMAScript'''. L'ultimo standard, di giugno 2017, è ECMA-262 Edition 8<ref name=ecma262>[https://www.ecma-international.org/publications/standards/Ecma-262.htm Standard ECMA-262]</ref>. È anche uno standard [[ISO]] (ISO/IEC 16262).
 
==Descrizione==
=== Java, JavaScript e JScript ===
Il cambio di nome da LiveScript a JavaScript si ebbe più o meno nel periodo in cui Netscape stava includendo il supporto per la tecnologia Java nel suo browser [[Netscape Navigator]].<ref>{{Cita web|url=https://auth0.com/blog/a-brief-history-of-javascript/|titolo=A Brief History of JavaScript|sito=Auth0 - Blog|lingua=en|accesso=2020-02-28}}</ref> La scelta del nome si rivelò fonte di grande confusione. Non c'è una vera relazione tra Java e JavaScript; le loro somiglianze sono soprattutto nella sintassi (derivata in entrambi i casi dal [[C (linguaggio)|linguaggio C]]); le loro semantiche sono piuttosto diverse, e in particolare i loro ''[[object model]]'' non hanno relazione e sono ampiamentenotevolmente incompatibili.
 
Dato il successo di JavaScript come linguaggio per arricchire le [[pagina web|pagine web]], [[Microsoft]] sviluppò un linguaggio compatibile, conosciuto come '''JScript'''. La necessità di specifiche comuni fu alla base dello standard ECMA 262 per ECMAScript, di cui sono state pubblicate otto edizioni da quando il lavoro iniziò, nel novembre [[1996]]<ref name=ecma262 />.
Riga 35:
=== Aspetti strutturali ===
Le caratteristiche principali di JavaScript sono:
* l'essere un [[linguaggio interpretato]]: il codice non viene [[compilazione|compilato]], ma [[Interprete (informatica)|interpretatoeseguito direttamente;]] (in JavaScript [[lato client]], lil codice viene eseguito dall'interprete è inclusocontenuto nel [[browser]] che si sta utilizzando)dell'utente..
* la [[sintassi (informatica)|sintassi]] è relativamente simile a quella deldei linguaggi [[linguaggio C|C]], del [[C++]] e di [[Java (linguaggio di programmazione)|Java]]<ref>{{cita libro|David|Flanagan|JavaScript - La guida|2000|Apogeo|Milano|pagine=p.1|isbn=88-7303-627-9}}</ref>.
* definisce le funzionalità tipiche dei [[linguaggio di programmazione ad alto livello|linguaggi di programmazione ad alto livello]] ([[struttura di controllo|strutture di controllo]], cicli, ecc.) e consente l'utilizzo del paradigma [[Programmazione orientata agli oggetti|object oriented]].
* è un [[linguaggio tipizzato|linguaggio debolmente tipizzato]]<ref>{{cita libro|David|Flanagan|JavaScript - La guida|2000|Apogeo|Milano|pagine=p.53|isbn=88-7303-627-9}}</ref>.
* è un [[linguaggio orientato agli oggetti|linguaggio debolmente orientato agli oggetti]]. Ad esempio, il meccanismo dell'[[Ereditarietà (informatica)|ereditarietà]] è più simile a quello del Self e del [[NewtonScript]] che a quello del [[Java (linguaggio di programmazione)|linguaggio Java]] (che è un linguaggio, fortemente orientato agli [[Oggetto (informatica)|oggetti]]). Gli oggetti stessi ricordano più gli [[array associativo|array associativi]] del [[Perl|linguaggio Perl]] che gli oggetti di Java o del C++.<ref name="Flanagan">{{cita libro|David|Flanagan|JavaScript - La guida|2000|Apogeo|Milano|isbn=88-7303-627-9}}</ref>
 
Altri aspetti di interesse: in JavaScript lato client, il codice viene eseguito direttamente sul [[client]] e non sul [[server]]. Il vantaggio di questo approccio è che, anche con la presenza di [[script]] particolarmente complessi, il [[web server]] nonrischia vienesovraccarichi sovraccaricatodato ache causail dellelavoro richiesteviene deisvolto dal [[client]]. DiUn controrovescio della medaglia è che, nel caso di script che presentino un [[codice sorgente]] particolarmente grandegrandi, il tempo per loil [[download|scaricamento]]trasferimento dalla rete può diventare abbastanzaeccessivamente lungo. Un altro svantaggio è il seguente:Inoltre ogni informazione che presuppone un accesso a dati memorizzati in un [[database]] remoto deve essere rimandata ada un linguaggio che effettui esplicitamentematerialmente la [[Transazione (basi di dati)|transazione]], per poi restituire i risultati ad una o più variabili JavaScript; operazioni del genere richiedono ilun nuovo caricamento della pagina stessa. ConQuesti l'avventolimiti disono [[AJAX]]però tuttistati questisuperati limitiin sonobuona statiparte superaticon la nascita di [[AJAX]].
 
Alcune funzionalitàaltre caratteristiche di JavaScript degne di nota:
* Può usare caratteri [[Unicode]]
* Può valutare le [[espressione regolare|espressioni regolari]] (introdotte nella versione 1.2; supporto da parte dei browser: a partire da [[Netscape Navigator]] 4 e [[Internet Explorer]] 4)
* Le espressioni JavaScript contenute in una stringa possono essere valutate usando la funzione <code>eval</code>.
Riga 50:
=== Uso ===
{{vedi anche|Interprete JavaScript}}
A differenza di altri linguaggi, quali il C o il C++, che permettono la scrittura di [[programma (informatica)|programmi]] completamente stand-alone, JavaScript viene utilizzato soprattutto in quantocome [[linguaggio di scripting]], integrato, quindi,ovvero all'interno di un altro [[programmacodice. (informatica)|programma]].
 
L'idea di base è che il ''programma ospite'' (quello che ospita ed esegue lo script) fornisca allo script un'[[Application Programming Interface|API]] ben definita, che consente l'accesso ad operazioni specifiche, la cui implementazione è a carico del ''programma ospite'' stesso. Lo script, quando eseguito, utilizza riferimenti a questa API per richiedere (al ''programma ospite'') l'esecuzione di operazioni specifiche, non previste dai costrutti del linguaggio JavaScript in sé. In effetti, questo è esattamente lo stessoTqale meccanismo che viene adottato anche in un linguaggiolinguaggi quale il [[linguaggio C|C]] o il[[Java (linguaggio di programmazione)|Java]], nel quale il programma si affida a delle [[Libreria (software)|librerie]], non previste dal linguaggio in sé, che permettono di effettuare operazioni quali l'I/O o l'esecuzione di chiamate a funzioni di sistema.
 
L'esempio tipico (e, forse, il più noto e comune) di ''programma ospite'' per uno script JavaScript è quello del [[browser]]. Un browser tipicamentemoderno incorpora normalmente un [[interprete JavaScript]];. quandoQuando viene visitata una [[pagina web]] che contiene il codice di uno script JavaScript, quest'ultimo viene portato in [[memoria primaria]] ed eseguito dall'interprete contenuto nel browser.
 
Le interfacce che consentono a JavaScript di rapportarsi con un browser sono chiamate [[Document Object Model|DOM]] (''Document Object Model'' in italiano ''Modello a Oggetti del Documento''). Molti siti web usano la tecnologia JavaScript lato client per creare potenti [[applicazione web|applicazioni web]] [[web dinamico|dinamiche]].
Riga 60:
Un uso principale del JavaScript in ambito [[Web]] è la scrittura di piccole funzioni integrate nelle pagine [[HTML]] che interagiscono con il DOM del browser per compiere determinate azioni non possibili con il solo [[HTML]] statico: controllare i valori nei campi di input, nascondere o visualizzare determinati elementi, ecc.
 
Sfortunatamente, gli standard DOM imposti dal [[W3C]] non sempre vengono rispettati daiin varimodo browser:consistente browsered diversiomogeneo (ancheda tutti. Browser diversi, a seconda del loro [[motore di rendering]]), espongono diversi oggetti o metodi allo script ([[Internet Explorer]] è solito aderire agli standard con piccole modifiche, eperciò tratta ad esempio l'oggetto event come globale), edspesso è quindi spesso necessario implementare controlli aggiuntivi ad una funzione JavaScript, per garantirne la compatibilità con ciascun browser e persino in funzione delle varie versioni del medesimo browser.
 
Al di fuori del Web, interpreti JavaScript sono integrati in diverse applicazioni. [[Adobe Acrobat]] e [[Adobe Reader]] supportano JavaScript nei [[file]] [[Portable Document Format|PDF]]. La piattaforma [[Mozilla]], che è alla base di molti diffusi browser Web, usa JavaScript per implementare l'[[interfaccia utente]] e la logica di transazione dei suoi vari prodotti. Gli interpreti JavaScript sono integrati anche nelle applicazioni proprietarie prive di interfacce programmabili via script. Infine la tecnologia [[Windows Script Host]] di [[Microsoft]] supporta JavaScript (via JScript), un linguaggio di scripting per i [[sistema operativo|sistemi operativi]].
Riga 83:
==== Usi frequenti nei web browser ====
 
JavaScript può essere usato per ogni aspetto dello scripting lato ''client'' di un [[web browser]], ma alcuni usi si sono diffusi più di altri. Tra gli esempi ricorrenti vi sono illa rimpiazzosostituzione delledi immagini, la creazione di finestre ''pop-up e'', la validazioneconvalida dei dati inseriti nellein ''[[form]]''.
 
Nella maggior parte dei browser, il seguente frammento di codice [[XHTML]] mostra un modo con cui un'immagine può essere scambiatasostituita con un'altra quando l'utente muove il [[cursore]] su di essa. Tale effetto (è chiamato spesso effetto ''rollover'' o ''mouse over''). Comunque comportamenti simili possono essere ottenuti anche [http://www.wellstyled.com/css-nopreload-rollovers.html usando solo i CSS].
 
<source lang="html">
Riga 95:
 
==== Filiazioni ====
Un nuovo esempio di uso di JavaScript sono i [[Bookmarklet]], piccole sezioni di codice all'interno dei ''segnalibri'' o ''Preferiti'' dei browser web.
 
Il linguaggio di programmazione usato in [[Macromedia Flash]] (chiamato [[ActionScript]]) ha una forte somiglianza con JavaScript, dovuta alla loro relazione condivisa con [[ECMAScript]]. ActionScript ha quasi la stessa sintassi di JavaScript, ma il modello a oggetti<ref>{{Cita web|url=https://www.adobe.com/devnet/flex/quickstarts/defining_data_models.html|titolo=Flex Quick Start - Defining data models {{!}} Adobe Developer Connection|sito=www.adobe.com|accesso=2020-02-28}}</ref> è decisamente diverso.
 
''JavaScript for OSA'' (JavaScript OSA, or JSOSA), è un linguaggio di scripting per [[Macintosh]] basato sull'implementazione JavaScript 1.5 di [[Mozilla]]<ref>{{Cita libro|nome=Matt|cognome=Neuburg|titolo=AppleScript: The Definitive Guide: Scripting and Automating Your Mac|url=https://books.google.it/books?id=zQy4mgqIccsC&pg=PT67&lpg=PT67&dq=JavaScript+for+OSA&source=bl&ots=sffWwSTFP0&sig=ACfU3U0Tvju43QHP8fourQ0aoslUhrKSJA&hl=it&sa=X&ved=2ahUKEwjJpI2KiPPnAhUxuaQKHVZgDrQQ6AEwBXoECAkQAQ#v=onepage&q=JavaScript%20for%20OSA&f=false|accesso=2020-02-28|data=2006-01-04|editore="O'Reilly Media, Inc."|lingua=en|ISBN=978-1-4493-7915-5}}</ref>. È un componente [[freeware]] reso disponibile da [http://www.latenightsw.com/ Late Night Software]. L'interazione con il sistema operativo e con le applicazioni di terze parti è gestita tramite un oggetto ''MacOS''. A parte ciò, il linguaggio è virtualmente identico all'implementazione Mozilla. È stato proposto come alternativa al più usato linguaggio [[AppleScript]].
 
=== Incompatibilità ===
 
Le varie implementazioni di JavaScript, come già accaduto per l'HTML, spesso non sono conformi agli standard, ma piuttosto sono costruite per funzionare con uno specifico browser web e con un insieme di versioni specifiche degli stessi.
L'attuale standard ECMAScript dovrebbe essere teoricamente la base di tutte le implementazioni JavaScript, ma in pratica i browser [[Mozilla]] (e Netscape) usano ''JavaScript'', Microsoft Internet Explorer usa ''JScript'', e altri browser come [[Opera (browser)|Opera]] e [[Safari (browser)|Safari]] usano altre implementazioni ''ECMAScript'', spesso con ulteriori caratteristiche non standard per permettere la [[compatibilità]] con JavaScript e JScript.
 
L'attuale standard [[ECMAScript]] dovrebbe essere teoricamente la base di tutte le implementazioni JavaScript, ma in pratica i browser [[Mozilla]] (e [[Netscape Navigator|Netscape]]) usano ''JavaScript'', [[Microsoft Internet Explorer]] usa ''JScript'', e altri browser come [[Opera (browser)|Opera]] e [[Safari (browser)|Safari]] usano altre implementazioni ''ECMAScript'', spesso con ulteriori caratteristiche non standard per permettere la [[compatibilità]] con JavaScript e JScript.
JavaScript e JScript contengono molte caratteristiche che non sono parte dello standard ufficiale ECMAScript, e possono anche essere privi di diverse caratteristiche. In tal modo, sono in parte incompatibili, il che porta gli autori di script a sopperire a tali problemi. Tra i due, JavaScript è più conforme allo standard: ciò significa che uno script redatto secondo gli standard ECMA funzionerà con la maggior parte dei browser, tranne Internet Explorer.
 
JavaScript e JScript contengono molte caratteristiche che non sono parte dello standard ufficiale ECMAScript, e possono anche essere privi di diverse caratteristiche. In tal modo, sono in parte incompatibili, il che porta gli autori di script a dovere sopperire a tali problemi durante la scrittura del [[software]]. Tra i due, JavaScript è più conforme allo standard: ciò significa che uno script redatto secondo gli standard ECMA funzionerà con la maggior parte dei browser, trannesoprattutto se in Internetversioni Explorerrecenti.
Un altro effetto è che ciascun browser potrebbe trattare lo stesso script in modo diverso, e ciò che funziona in un browser potrebbe non funzionare in un altro browser, o persino in una diversa versione dello stesso browser. Come con l'HTML, è quindi raccomandabile scrivere codice conforme agli standard.
 
Un altro effetto è che ciascun browser potrebbe trattare lo stesso script in modo diverso, e ciò che funziona in un browser potrebbe non funzionare in un altro browser, o persino in una diversa versione dello stesso browser. Come con l'HTML, è quindi raccomandabile scrivere codice conforme agli standard.
 
Naturalmente negli anni sono state realizzate varie librerie e framework che possono essere usate per semplificare la scrittura di codice JavaScript che funzioni correttamente indipendentemente dal browser usato. Una delle librerie più conosciute e diffuse per semplificare la scrittura di semplici script all'interno di pagine HTML o PHP è [[jQuery]], mentre esistono numerosi framework per scrivere applicativi in JavaScript anche estremamente sofisticati (lato client e/o lato server) ignorando del tutto la necessità di dovere riconoscere quale browser utilizzerà l'utente finale.
 
==== Contromisure ====
 
Ci sonoEsistono due tecniche principali per gestire le incompatibilità: ''browser sniffing'' (lett.letteralmente "annusare il browser") e ''object detection'' ("rilevazione dell'oggetto").

Quando c'eranoesistevano solo due browser che supportavano lo scripting, ovvero (Netscape e Internet Explorer), il browser sniffing era la tecnica più diffusa. Controllando un certo numero di proprietà del client, che restituivano informazioni su piattaforma, browser e versione, era possibile per il codice discernere esattamente in quale browser veniva eseguito. Piùin tardi,seguito le tecniche di ''sniffing'' divennero più difficili da implementare, dato che Internet Explorer cominciò a "dissimulare" le sueproprie informazioni sul client, per esempio fornendo informazioni sul browser sempre più inaccurate (i motivi per questo comportamento della Microsoft sono da tempo oggetto di disputa). Più tardi ancora, il browser sniffing divenne una sorta di complicata forma d'arte, quando cioè altri browser dotati di scripting entrarono nel mercato, ciascuno con proprie informazioni su piattaforma, client e versione.
 
L'object detection si basa sul controllarecontrollo ldell'esistenza della proprietà di un oggetto.
 
<source lang="javascript">
Line 128 ⟶ 133:
</source>
 
Un esempio più complesso si basa sull'uso di test [[Algebra di Boole|booleani]] collegati:
 
<source lang="javascript">
Line 136 ⟶ 141:
In questo caso, l'espressione "document.body.style" normalmente causerebbe un errore in un browser che non ha la proprietà "document.body", ma l'uso dell'operatore "&&" assicura che "document.body.style" non venga mai chiamato se "document.body" non esiste. Il test sfrutta questa particolarità della valutazione di espressioni logiche, chiamata ''[[lazy evaluation]]'' (lett. "valutazione pigra").
 
Oggi, una combinazione di browser sniffing, object detection, e conformità agli standard come le specifiche ECMAScript e i [[Foglio di stile|CSS]] sono usati in varie proporzionimisure per provare ad assicurare che un utente non incontri mai un errore JavaScript.
 
== Utilizzo in HTML ==