Czym tak naprawdę jest JavaScript?

95

Wszystko zaczęło się, gdy szukałem sposobu na przetestowanie mojej strony internetowej pod kątem zgodności z JavaScript, takiej jak W3C HTML Validator . Jeszcze nie znalazłem. Daj mi znać, jeśli znasz jakieś ...

  1. Szukałem oficjalnej strony JavaScript i znalazłem skrypt ECMA . Ci ludzie znormalizowali język skryptowy (nie mam już ochoty nazywać go JavaScript!) I nazwali go ECMA-262 ( Wikipedia ). Ich najnowszą pracą jest edycja 5.1

  2. JavaScript został opracowany przez Mozilla Corporation, a ich ostatnia stabilna wersja to 1.8.5 ( zobacz to ), która jest oparta na wydaniu ECMA 5.1

  3. Strona Wikipedii związane wspomina dialektów. JavaScript 1.8.5 Mozilli jest wymieniony jako dialekt wraz z JScript 9 (IE) i JavaScript (Chrome V8 [ Wiki ]) i wiele innych. Czy rozumiem, że JavaScript 1.8.5 jest pochodną ECMA-262, a SpiderMonkey [ Wiki ] to silnik, który go obsługuje? A Chrome ma własny dialekt, a silnik V8 to program, który go uruchamia?

Biorąc pod uwagę wszystkie te dialekty oparte na ECMA-262, nie rozumiem już „Czym jest JavaScript ”? Czy istnieją naprawdę języki skryptowe dla różnych przeglądarek? Czy różni realizatorzy spotykają się, aby uzgodnić zgodność krzyżową dialektów? Czy to wysiłek ECMA?

Lord Loh.
źródło
10
Zapomniałeś wspomnieć o języku ActionScript, który jest dialektem ECMA, który nie ma nic wspólnego z tym, co możesz nazwać JavaScript.
DaveRandom
4
Nie tyle dla zgodności (jak już zaznaczyłeś), ale jslint jest całkiem niezły do ​​sprawdzania kodu.
SomeKittens
2
@MadaraUchiha - Zgadzam się „po prostu użyj jQuery. Wszystko będzie dobrze”. nie będzie dobrze. Dlatego zacząłem to badać. Moja strona bharath.lohray.com działa dobrze w Chrome i Firefox, a walidator W3C również nie generuje żadnych błędów, ale na najnowszej IE jest do bani! Co więcej, o ile podoba mi się pomysł ludzi na anybrowser.org/campaign , nie mogę być prawdziwie przeglądarką!
Lord Loh.
7
Jeśli chodzi o twoją stronę, przewijanie jest bardzo denerwujące i przesadzone. Po prostu IMO. A tytuł „Pana” brzmi pompatycznie jak diabli, nawet jeśli faktycznie jesteś Panem.
NullUserException
11
Jest niepotrzebnie krzykliwy. Nie widzisz postów przesuwających się w górę i w dół na SE. Jeśli ma to być profesjonalnie wyglądająca strona internetowa i nadal chcesz przejść, użyj czegoś bardziej dyskretnego, takiego jak wyciszanie / wyciszanie.
NullUserException

Odpowiedzi:

96

Prawie wszystkie dojrzałe języki są zdefiniowane w specyfikacji, a kompilatory lub tłumacze próbują postępować zgodnie ze standardem zdefiniowanym w tej specyfikacji. Ale bardzo rzadko się to udaje, chyba że standard określa autor języka.

Można znaleźć standardu C ++ 2003 , w specyfikacji C # 4 , w specyfikacji Java 7 i wiele innych online. Wiele z nich ma numery normalizacyjne ECMA lub ISO. To tylko organizacje, w których możesz zarejestrować standard i uczynić go bardziej oficjalnym.

Ruby historycznie robiła rzeczy nieco inaczej, mając jako specyfikację wykonywalny zestaw testów . Tak więc, jeśli chcesz napisać tłumacza i nazwać go standardowym Ruby, po prostu musiałeś stworzyć tłumacza, który przeszedł wszystkie te testy. Ale nawet Ruby może ostatecznie stać się bardziej formalną specyfikacją .

JavaScript nie różni się, chyba że w sposób, w jaki ewoluował.

Javascript został stworzony po raz pierwszy przez Netscape. Nazwali go LiveScript, ale wyglądał podobnie do Java i zawarli umowę z Sunem nad tą nazwą, co było korzystne zarówno dla marketingu Netscape, jak i Java. Microsoft miał VBScript i (z powodów prawdopodobnie nie do pomyślenia) w zasadzie skopiował Javascript, ale nazwa była własnością Sun, więc bezczelnie nazwali ją JScript.

Ale JScript, chociaż jest bardzo podobny do JavaScript w składni, często korzysta z COM - na przykład IE5 i 6 tworzą instancję obiektu XMLHttpRequest new ActiveXObject("Microsoft.XMLHTTP");.

I tak narodziły się równoległe, podobne, ale także różne „dialekty” Javascript. Z czasem różne grupy posiadające przeglądarki o mniejszym udziale w rynku niż IE próbowały ujednolicić język i przez lata Microsoft stawiał opór. Do wersji V8.

V8 był szybki. Wyznacza zupełnie nowy standard rynkowy. Sprawiało, że wszystko inne wyglądało kiepsko.

W wyniku różnych spraw antymonopolowych przeciwko Microsoftowi IE tracił udział w rynku. Nagle w interesie Microsoftu było wsparcie standaryzacji. Jeszcze nas tam nie ma, ale jest na dobrej drodze.

Tymczasem V8 był open-source, co pozwoliło ludziom zacząć myśleć nowych zastosowań dla szybkiego parsera JavaScript, takich jak node.js .

Wróćmy jednak do pytania: co to jest Javascript? Jest to pospolita (i oryginalna) nazwa ECMAScript, specyfikacja języka prototypowego, powszechnie, ale nie wyłącznie, używana do nawigacji i manipulowania modelem obiektowym domeny w przeglądarce.

ECMA-262 jest tylko standardową definicją, podobnie jak ECMA-334 jest standardową definicją języka C #. ECMAScript to jedyna nazwa, na którą wszystkie zainteresowane strony mogły się zgodzić jeszcze w roku 99, kiedy napisano ECMA-262.

pdr
źródło
7
Gdybym mógł głosować twoją odpowiedź więcej niż raz, zrobiłbym to :-) To pomaga wyjaśnić kilka rzeczy. Analogia kompilatorów C sprawia, że ​​sytuacja jest trochę zrozumiała :-) Tyle, że JavaScript nie jest skompilowany na binarny, a użytkownicy końcowi widzą nie / quasi-funkcjonalne skrypty. Czy mam więc zrozumieć, że nie mogę zbudować strony zgodnie ze standardem i mam nadzieję, że będzie ona działać tak samo we wszystkich przeglądarkach? (ale jest operatywnym słowem).
Lord Loh.
1
@LordLoh. To jest poprawne. Ale możesz pozwolić bibliotekom takim jak jQuery i Prototype wyodrębnić różnice między sobą.
pdr
Ten post i badania rozpoczęły się, gdy animacja jQuery nie działała na IE9, i skłamałem pomysłowi na kampanię anybrowser.org i miałem nadzieję, że uda mi się trzymać standardu. HTML5 / CSS3 / JS. JS skończyło jako błąd w mojej masce.
Lord Loh.
1
@LordLoh. Nie byłbym tak pewien, że to wina jQuery. Szybki rzut oka pokazuje problemy z HTML-em (na przykład brakujące cytaty), a kiedy minimalizujesz w ten sposób Javascript, wyniki mogą być dziwne, jeśli nie jesteś bardzo dokładny. Pamiętam problem dawno temu, w którym brakowało mi średnika i nie udało się to tylko po kompresji w jednej z głównych przeglądarek. jQuery jest dość stabilny i powinien działać dobrze z IE9.
pdr
5
@LordLoh. console.log to twój problem. Nie działa, chyba że otworzysz pasek narzędzi programisty (a tym samym utworzysz obiektową „konsolę”).
pdr
23

Javascript jest powszechnie stosowaną implementacją ECMAScript. Jest to bardzo podobna sytuacja do rodziny Scheme . W schemacie masz wysoce sformalizowaną specyfikację. Obecna wersja to R6RS, chociaż R5RS jest zdecydowanie częściej wdrażanym standardem od tego postu. Wdrożenia są bardziej rozproszone niż ECMAScript ze względu na wiek Scheme i ogólne filozofie.

JavaScript jest obecnie powszechny, głównie ze względu na gwałtowny wzrost udziału w rynku zarówno przeglądarki Mozilla Firefox, jak i Google Chrome. Zdobył przyczółek z Netscape Navigator, który ostatecznie zmienił się w przeglądarkę Mozilla, a następnie w Firefox (i Iceweasel, jeśli biegasz z tłumem Scheme).

Teraz tutaj jest trochę groźnie. Większość wydajności Javascript pochodzi z analizatora składni i silnika, który go obsługuje. To tutaj ujawniają się prawdziwe różnice między przeglądarkami. Spidermonkey uruchamia Javascript inaczej niż V8. JavaScript wciąż ma poważne problemy, takie jak brak w pełni powszechnej biblioteki, choć nad tym pracujemy.

Więc jeśli Javascript to C ++, to ECMAScript byłby C ++ 11, przy czym UNIX i G ++ byłyby najbliższe „standardowi”, podczas gdy C ++ dla .NET i Objective C ++ leżą znacznie dalej, jak robi to ActionScript z ECMAScript

Inżynier świata
źródło