ECMAScript (Italiano)
La specifica ECMAScript è una specifica standardizzata di un linguaggio di scripting sviluppato da Brendan Eich di Netscape; inizialmente chiamato Mocha, poi LiveScript e infine JavaScript. Nel dicembre 1995, Sun Microsystems e Netscape annunciarono JavaScript in un comunicato stampa. Nel novembre 1996, Netscape annunciò una riunione dell’Ecma International standards organization per promuovere la standardizzazione di JavaScript. La prima edizione dell’ECMA-262 è stata adottata dall’Assemblea generale dell’Ecma nel giugno 1997. Da allora sono state pubblicate diverse edizioni dello standard linguistico., Il nome “ECMAScript” era un compromesso tra le organizzazioni coinvolte nella standardizzazione del linguaggio, in particolare Netscape e Microsoft, le cui dispute dominavano le prime sessioni di standard. Eich ha commentato che ” ECMAScript era sempre un nome commerciale indesiderato che suona come una malattia della pelle.”ECMAScript è stato formalizzato attraverso la semantica operativa dal lavoro presso la Stanford University e il Dipartimento di Informatica, Imperial College di Londra per l’analisi della sicurezza e la standardizzazione.,
Sia JavaScript che JScript sono conformi alle specifiche ECMAScript e forniscono anche funzionalità aggiuntive non descritte nelle specifiche.
VersionsEdit
Esistono undici edizioni di ECMA-262 pubblicate. Il lavoro sulla versione 11 dello standard è stato finalizzato a giugno 2020.,
Edition | Data di pubblicazione | Nome | Cambia dalla prima edizione | Editor | |||
---|---|---|---|---|---|---|---|
1 | giugno 1997 | Prima edizione | Guy L. Steele Jr,998 | Editoriale modifiche per mantenere la specifica pienamente in linea con ISO/IEC 16262 internazionale standard | Mike Cowlishaw | ||
3 | dicembre 1999 | Aggiunto espressioni regolari, una migliore gestione delle stringhe, le nuove istruzioni di controllo, try/catch gestione delle eccezioni, definizione più rigorosa di errori, per la formattazione output numerico, e altri miglioramenti | Mike Cowlishaw | ||||
4 | Abbandonato (ultima bozza del 30 giugno 2003) | Quarta Edizione è stata abbandonata, a causa di divergenze politiche riguardanti la lingua complessità., Molte caratteristiche proposte per la quarta edizione sono state completamente abbandonate; alcune sono state incorporate nella sesta edizione. | |||||
5 | Dicembre 2009 | Aggiunge “strict mode”, un sottoinsieme destinato a fornire un controllo degli errori più approfondito ed evitare costrutti soggetti a errori. Chiarisce molte ambiguità nella specifica 3rd edition e soddisfa il comportamento delle implementazioni del mondo reale che differivano costantemente da quella specifica., Aggiunge alcune nuove funzionalità, come getter e setter, il supporto della libreria per JSON e una riflessione più completa sulle proprietà dell’oggetto. | Pratap Lakshman, Allen Wirfs-Brock | ||||
5.1 | Giugno 2011 | Questa edizione 5.1 dello standard ECMAScript è completamente allineata con la terza edizione dello standard internazionale ISO / IEC 16262:2011., | Vedere la 9 ° Edizione – ECMAScript 2018 | Brian Terlson | |||
10 | giugno 2019 | ECMAScript 2019 (ES2019) | Vedere la 10 ° Edizione – ECMAScript 2019 | Brian Terlson, Bradley Farias, Jordan Harband | |||
11 | giugno 2020 | ECMAScript 2020 (ES2020) | Vedere l ‘ 11 ° Edizione – ECMAScript 2020 | Jordan Harband, Kevin Smith |
Nel giugno del 2004, Ecma International ha pubblicato ECMA-357 standard, la definizione di un’estensione di ECMAScript, noto come ECMAScript for XML (E4X)., Ecma ha anche definito un” Profilo compatto ” per ECMAScript, noto come ES-CP o ECMA 327, progettato per dispositivi con risorse limitate, che è stato ritirato nel 2015.
4a edizione (abbandonata)Modifica
La proposta quarta edizione di ECMA-262 (ECMAScript 4 o ES4) sarebbe stato il primo importante aggiornamento di ECMAScript da quando la terza edizione è stata pubblicata nel 1999. La specifica (insieme a un’implementazione di riferimento) era originariamente destinata al completamento entro ottobre 2008. La prima bozza era datata febbraio 1999., Una panoramica della lingua è stata rilasciata dal gruppo di lavoro il 23 ottobre 2007.
Nell’agosto 2008, la proposta ECMAScript 4th edition era stata ridimensionata in un progetto con nome in codice ECMAScript Harmony. Caratteristiche in discussione per Harmony al momento incluso:
- classi,
- un sistema di moduli,
- annotazioni di tipo opzionale e tipizzazione statica, probabilmente utilizzando un sistema di tipo strutturale,
- generatori e iteratori,
- assegnazione destrutturazione, e
- tipi di dati algebrici.,
L’intento di queste funzionalità era in parte quello di supportare meglio la programmazione in grande, e di permettere di sacrificare parte della capacità dello script di essere dinamico per migliorare le prestazioni. Ad esempio, Tamarin – la macchina virtuale per ActionScript, sviluppata e open source da Adobe-ha il supporto JIT (just – in-time Compilation) per alcune classi di script.
Oltre a introdurre nuove funzionalità, alcuni bug ES3 sono stati proposti per essere corretti nell’edizione 4. Queste correzioni e altre, e il supporto per la codifica/decodifica JSON, sono stati piegati nella specifica ECMAScript, 5th Edition.,
Il lavoro è iniziato sull’edizione 4 dopo che la specifica ES-CP (Compact Profile) è stata completata e ha continuato per circa 18 mesi in cui sono stati fatti progressi lenti bilanciando la teoria della specifica JavaScript 2 di Netscape con l’esperienza di implementazione di JScript .NET di Microsoft. Dopo qualche tempo, l’attenzione si è spostata sullo standard ECMAScript for XML (E4X). L’aggiornamento non è stato senza polemiche. Alla fine del 2007, un dibattito tra Eich, in seguito CTO della Mozilla Foundation, e Chris Wilson, architetto della piattaforma di Microsoft per Internet Explorer, è diventato pubblico su un certo numero di blog., Wilson ha avvertito che, poiché le modifiche proposte a ECMAScript lo rendevano retrocompatibile per alcuni aspetti alle versioni precedenti del linguaggio, l’aggiornamento equivaleva a “rompere il Web” e che le parti interessate che si opponevano ai cambiamenti venivano “nascoste alla vista”. Eich ha risposto affermando che Wilson sembrava essere “ripetendo falsità nei blog” e ha negato che ci fosse il tentativo di sopprimere il dissenso e ha sfidato i critici a dare esempi specifici di incompatibilità., Ha sottolineato che Microsoft Silverlight e Adobe AIR si basano rispettivamente su c# e ActionScript 3, entrambi più grandi e più complessi di ECMAScript Edition 3.
5a EditionEdit
Yahoo, Microsoft, Google e altri dissidenti della 4a edizione formarono una propria sottocommissione per progettare un aggiornamento meno ambizioso di ECMAScript 3, provvisoriamente chiamato ECMAScript 3.1. Questa edizione si concentrerà sugli aggiornamenti di sicurezza e libreria, con una grande enfasi sulla compatibilità. Dopo il suddetto sparring pubblico, l’ECMAScript 3.,i team 1 e ECMAScript 4 hanno concordato un compromesso: le due edizioni sarebbero state lavorate, in parallelo, con il coordinamento tra i team per garantire che ECMAScript 3.1 rimanga un sottoinsieme rigoroso di ECMAScript 4 sia nella semantica che nella sintassi.
Tuttavia, le diverse filosofie in ogni team hanno portato a ripetute interruzioni della regola del sottoinsieme, ed è rimasto dubbio che i dissidenti di ECMAScript 4 avrebbero mai supportato o implementato ECMAScript 4 in futuro., Dopo oltre un anno dal disaccordo sul futuro di ECMAScript all’interno dell’Ecma Technical Committee 39, i due team hanno raggiunto un nuovo compromesso nel luglio 2008: Brendan Eich ha annunciato che Ecma TC39 avrebbe concentrato il lavoro sul progetto ECMAScript 3.1 (in seguito rinominato ECMAScript, 5th Edition) con la piena collaborazione di tutte le parti, e i fornitori avrebbero mirato ad almeno due implementazioni interoperabili entro l’inizio del 2009. Nell’aprile 2009, Ecma TC39 ha pubblicato la bozza “finale” della 5a edizione e ha annunciato che il test delle implementazioni interoperabili doveva essere completato entro la metà di luglio., Il 3 dicembre 2009 è stata pubblicata la 5a edizione ECMA-262.
6a edizione – ECMAScript 2015Edit
La 6a edizione, inizialmente conosciuta come ECMAScript 6 (ES6) e successivamente rinominata in ECMAScript 2015, è stata finalizzata nel giugno 2015. Questo aggiornamento aggiunge una nuova sintassi significativa per la scrittura di applicazioni complesse, incluse le dichiarazioni di classe (class Foo { ... }
), moduli ES6 come import * as moduleName from "..."; export const Foo
, ma li definisce semanticamente negli stessi termini della modalità rigorosa ECMAScript 5., Altre nuove caratteristiche includono iteratori e for...of
passanti, Python-stile generatori, freccia espressione di funzione (() => {...}
), let
parola chiave per locali dichiarazioni, const
parola chiave per la costante locale, dichiarazioni, dati binari, array tipizzati, nuove collezioni (mappe, set e WeakMap), le promesse, numero di per la matematica e miglioramenti, di riflessione, di proxy (metaprogrammazione per oggetti virtuali e wrapper) e il modello per le stringhe letterali. L’elenco completo è ampio., Come la prima specifica” ECMAScript Harmony”, è anche conosciuta come ” ES6 Harmony.”
7a edizione – ECMAScript 2016Edit
La 7a edizione, ufficialmente nota come ECMAScript 2016, è stata finalizzata nel giugno 2016. Le sue caratteristiche includono un blocco-ambito di variabili e funzioni, destrutturazione dei modelli (di variabili), coda corretta chiamate, operatore di elevamento a potenza **
per i numeri, await
async
parole chiave per la programmazione asincrona, e il Array.prototipo.include la funzione
.,
L’operatore di esponenziazione è equivalente a Math.pow
, ma fornisce una sintassi più semplice simile a linguaggi come Python, F#, Perl e Ruby.async
/await
è stato salutato come un modo più semplice per utilizzare le promesse e sviluppare codice asincrono.
8a edizione – ECMAScript 2017Edit
L’8a edizione, ufficialmente nota come ECMAScript 2017, è stata finalizzata nel giugno 2017. Le sue caratteristiche includono l’oggetto.valori
,Oggetto.,voci
eOggetto.getOwnPropertyDescriptors
funzioni per una facile manipolazione di oggetti,async/await
costruzioni che utilizzano generatori e promesse e funzionalità aggiuntive per concorrenza e atomica.
9a edizione – ECMAScript 2018Edit
La 9a edizione, ufficialmente nota come ECMAScript 2018, è stata finalizzata a giugno 2018. Le nuove funzionalità includono operatori rest/spread per i letterali oggetto (tre punti: ...identifier
), iterazione asincrona, Promise.prototype.finally
e aggiunte a RegExp.,
L’operatore spread consente la facile copia delle proprietà dell’oggetto, come mostrato di seguito.
10th Edition – ECMAScript 2019Edit
La 10th edition, ufficialmente nota come ECMAScript 2019, è stata pubblicata a giugno 2019. Le funzionalità aggiunte includono, ma non sono limitate a, Array.prototype.flat
, Array.prototype.flatMap
, modifiche a Array.sort
e Object.fromEntries
.
Array.sort
è ora garantito per essere stabile, il che significa che gli elementi con la stessa precedenza di ordinamento appariranno nello stesso ordine nell’array ordinato., Array.prototype.flat(depth=1)
appiattisce un array a una profondità specificata, il che significa che tutti gli elementi subarray (fino alla profondità specificata) sono concatenati ricorsivamente.
11a edizione – ECMAScript 2020Edit
L’11a edizione, ufficialmente nota come ECMAScript 2020, è stata pubblicata nel giugno 2020. Oltre alle nuove funzioni, questa versione include unBigInt
tipo primitivo per interi di dimensioni arbitrarie, l’operatore di coalescenza nullish e l’oggetto globalThis.,
I BIGINT vengono creati con il costruttoreBigInt
o con la sintassi10n
, dove “n” viene posizionato dopo il numero letterale. I BIGINT consentono la rappresentazione e la manipolazione di numeri interi oltre il numero.MAX_SAFE_INTEGER
, mentre i numeri sono rappresentati da un valore IEEE 754 a 64 bit a doppia precisione., Le funzioni integrate inMath
non sono compatibili con BIGINT; ad esempio, l’esponenziazione di BIGINT deve essere eseguita con l’operatore**
invece diMath.pow.
L’operatore di coalescenza nullish, ??
, restituisce il suo operando a destra quando il suo lato sinistro ènull
oundefined
., Ciò contrasta con l’operatore||
, che restituirebbe “string” per tutti gli esempi.
false ?? "string" // -> falseNaN ?? "string" // -> NaNundefined ?? "string" // -> "string"
Il concatenamento opzionale consente di accedere ai nodi annidati in un oggetto senza avere un controllo AND ad ogni livello.
Un esempio è const zipcode = person?.indirizzo?.codice postale
. Se una qualsiasi delle proprietà non è presente, codice postale
saràundefined
.
ES.Successivamente modifica
ES.,Next è un nome dinamico che si riferisce a qualunque sia la versione successiva al momento della scrittura. ES.Le caratteristiche successive sono proposte finite (aka “stage 4 proposals”) come elencate nella proposta finita che non fanno parte di una specifica ratificata. Il comitato linguistico segue un modello “living spec”, quindi questi cambiamenti fanno parte dello standard e la ratifica è una formalità.