Che cos'è JavaScript, davvero?


95

Tutto è iniziato quando stavo cercando un modo per testare la mia pagina web per la conformità JavaScript come il validatore HTML W3C . Non ne ho ancora trovato uno. Fammi sapere se conosci ...

  1. Ho cercato la pagina JavaScript ufficiale e ho trovato ECMA Script . Queste persone hanno standardizzato un linguaggio di scripting (non ho più voglia di chiamarlo JavaScript!) E lo hanno chiamato ECMA-262 ( Wikipedia ). Il loro ultimo lavoro è l'edizione 5.1

  2. JavaScript è stato sviluppato da Mozilla Corporation e la loro ultima versione stabile è la 1.8.5 ( vedi questo ) che si basa sull'edizione 5.1 dell'ECMA

  3. La pagina Wikipedia collegata menziona i dialetti. Il JavaScript 1.8.5 di Mozilla è elencato come dialetto insieme a JScript 9 (IE) e JavaScript (Chrome V8 [ Wiki ]) e molti altri. Devo capire che JavaScript 1.8.5 è un derivato dell'ECMA-262 e SpiderMonkey [ Wiki ] è un motore che lo esegue? E Chrome ha il suo dialetto e il motore V8 è il programma che lo esegue?

Con tutti questi dialetti basati su ECMA-262, ciò che non riesco più a capire è "Cos'è JavaScript "? Esistono linguaggi di scripting veramente cross-browser? I vari attuatori si uniscono per concordare la compatibilità incrociata del dialetto? Questo sforzo è ECMA?


10
Hai dimenticato di menzionare ActionScript, che è un dialetto ECMA che non ha nulla a che fare con quello che potresti chiamare Javascript.
DaveRandom,

4
Non tanto per la conformità (come hai già evidenziato), ma jslint è abbastanza carino per controllare il codice.
SomeKittens,

2
@MadaraUchiha - Sono d'accordo "usa solo jQuery. Andrà tutto bene." non andrà bene. Ecco perché ho iniziato a ricercare questo. Il mio sito bharath.lohray.com funziona bene su Chrome e Firefox e il validatore W3C non genera alcun errore, ma fa schifo alla grande con IE più recente! Inoltre, per quanto mi piaccia l'idea della gente in anybrowser.org/campaign , non posso essere veramente cross-browser!
Lord Loh.

7
A proposito della tua pagina, lo scorrimento è molto fastidioso e sopra le righe. Solo IMO. E il titolo di "Lord" sembra pomposo da morire, anche se in realtà sei un Lord.
NullUserException il

11
È inutilmente appariscente. Non vedi i post scorrere su e giù su SE. Se questo è pensato per essere un sito Web dall'aspetto professionale e desideri ancora transizioni, usa qualcosa di più discreto come una dissolvenza in entrata / in uscita.
NullUserException il

Risposte:


96

Praticamente tutti i linguaggi maturi sono definiti da una specifica e compilatori o interpreti tentano di seguire lo standard definito in quella specifica. Ma molto raramente ci riescono, a meno che lo standard non sia definito dall'autore della lingua.

Puoi trovare lo standard C ++ 2003 , la specifica C # 4 , la specifica Java 7 e molti altri online. Molti di questi hanno numeri di standardizzazione ECMA o ISO. Queste sono solo organizzazioni con le quali è possibile registrare uno standard e renderlo più ufficiale.

Storicamente Ruby ha fatto le cose in modo leggermente diverso, avendo una serie di test eseguibili come specifica . Quindi, se vuoi scrivere un interprete e chiamarlo Ruby standard, devi solo creare un interprete che ha superato tutti quei test. Ma anche Ruby probabilmente diventerà una specifica più formale alla fine.

Javascript non è diverso, tranne forse nel modo in cui si è evoluto.

Javascript è stato creato per la prima volta da Netscape. Lo chiamavano LiveScript, ma sembrava simile a Java e avevano stretto un accordo con Sun sul nome, il che andava a beneficio sia della commercializzazione di Netscape che di Java. Microsoft aveva VBScript e (per ragioni probabilmente perse a causa di congetture) sostanzialmente copiò Javascript, ma il nome era di proprietà di Sun, quindi lo chiamarono sfacciatamente JScript.

Ma JScript, pur essendo molto simile a Javascript nella sintassi, ha fatto molto uso di COM, ad esempio IE5 e 6 hanno creato un'istanza di un oggetto XMLHttpRequest new ActiveXObject("Microsoft.XMLHTTP");.

E così nacquero "dialetti" paralleli, simili ma anche diversi di Javascript. Nel tempo, vari gruppi che possiedono browser con una quota di mercato inferiore a IE hanno cercato di standardizzare la lingua e per anni Microsoft ha resistito. Fino a V8.

V8 è stato veloce. Stabilisce un nuovo standard di mercato. Ha reso tutto il resto scarso.

E, attraverso vari casi antitrust contro Microsoft, IE stava perdendo quote di mercato. Improvvisamente, era nell'interesse di Microsoft supportare la standardizzazione. Non ci siamo ancora arrivati, ma è sulla buona strada.

Nel frattempo, V8 era open-source, che ha permesso alle persone di iniziare a pensare a nuovi usi per un parser veloce JavaScript, come ad esempio Node.JS .

Ma, per tornare alla tua domanda: che cos'è Javascript? È il nome comune (e originale) di ECMAScript, una specifica per un linguaggio prototipico comunemente, ma non esclusivamente, utilizzato per navigare e manipolare il modello a oggetti di dominio in un broswer.

ECMA-262 è solo la definizione standard, come ECMA-334 è la definizione standard per C #. ECMAScript era l'unico nome su cui tutte le parti interessate potevano concordare, già nel '99, quando fu scritto ECMA-262.


7
Se potessi votare la tua risposta più di una volta, l'avrei fatto :-) Questo aiuta a chiarire alcune cose. L'analogia dei compilatori C rende la situazione un po 'comprensibile :-) Tranne che JavaScript non è compilato in binario e gli utenti finali vedono script non / quasi funzionali. Quindi devo capire che non riesco a costruire una pagina secondo uno standard e spero di averla ancora funzionante su tutti i browser? (pur essendo la parola chiave).
Lord Loh.

1
@LordLoh. È corretto. Ma puoi consentire a librerie come jQuery e Prototype di sottrarre le differenze per te.
pdr,

Questo post e la ricerca sono iniziati quando l'animazione jQuery non ha funzionato su IE9 e ho mentito all'idea della campagna anybrowser.org e speravo di riuscire a rispettare uno standard. HTML5 / CSS3 / JS. Il JS è finito come il bug nel mio cofano.
Lord Loh.

1
@LordLoh. Non sarei così sicuro che sia colpa di jQuery. Solo una rapida occhiata mostra problemi con il tuo HTML (virgolette mancanti, per esempio) e quando minimizzi così il tuo Javascript in questo modo, ci possono essere risultati strani se non sei stato molto preciso. Ricordo un problema molto tempo fa in cui avevo perso un punto e virgola e non è riuscito dopo la compressione in uno dei principali browser. jQuery è piuttosto stabile e dovrebbe funzionare bene con IE9.
pdr,

5
@LordLoh. console.log è il tuo problema. Non funziona se non si apre la barra degli strumenti dello sviluppatore (e quindi si crea l'oggetto "console").
pdr,

23

Javascript è un'implementazione comunemente usata di ECMAScript. È una situazione molto simile alla famiglia Scheme . In Scheme, hai una specifica altamente formalizzata. La versione attuale è R6RS sebbene R5RS sia di gran lunga lo standard più comunemente implementato a partire da questo post. Le implementazioni sono più disperse di quelle di ECMAScript a causa dell'età dello Scheme e delle filosofie generali.

Javascript sembra essere comune ora in gran parte a causa della crescita esplosiva della quota di mercato di Mozilla Firefox e Google Chrome. Ha guadagnato un punto d'appoggio in origine con Netscape Navigator che alla fine si è trasformato nel browser Mozilla e poi in Firefox (e Iceweasel se corri con la folla di Scheme).

Ora ecco dove diventa un po 'rischioso. La maggior parte delle prestazioni di Javascript proviene dal parser e dal motore che la esegue. È qui che emergono le reali differenze tra i browser. Spidermonkey esegue Javascript in modo diverso rispetto a V8. Javascript ha ancora punti difficili come la mancanza di una libreria completamente comune, anche se su cui si sta lavorando.

Quindi se Javascript fosse C ++, allora ECMAScript sarebbe C ++ 11, con UNIX e G ++ il più vicino allo "standard" mentre C ++ per .NET e Objective C ++ si trovano molto più lontano nel modo in cui Actionscript fa da ECMAScript

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.