Что такое JavaScript на самом деле?


95

Все это началось, когда я искал способ проверить свою веб-страницу на соответствие JavaScript, например, HTML-валидатор W3C . Я еще не нашел один. Так дайте мне знать, если вы знаете что-нибудь ...

  1. Я искал официальную страницу JavaScript и нашел скрипт ECMA . Эти люди стандартизировали язык сценариев (мне больше не хочется называть его JavaScript!) И назвали его ECMA-262 ( Википедия ). Их последняя работа - Выпуск 5.1

  2. JavaScript был разработан корпорацией Mozilla, и их последняя стабильная версия - 1.8.5 ( см. Это ), основанная на версии 5.1 ECMA.

  3. На странице Википедии есть ссылки на диалекты. JavaScript 1.8.5 в Mozilla указан как диалект наряду с JScript 9 (IE) и JavaScript (Chrome V8 [ Wiki ]) и многими другими. Должен ли я понять, что JavaScript 1.8.5 является производным от ECMA-262, а SpiderMonkey [ Wiki ] - это движок, который его запускает? И у Chrome есть свой собственный диалект, и двигатель V8 - программа, которая управляет этим?

Со всеми этими диалектами, основанными на ECMA-262, я больше не могу понять, что такое JavaScript ? Существуют ли действительно кросс-браузерные языки сценариев? Собираются ли различные исполнители, чтобы договориться о взаимной совместимости диалектов? Это усилие ECMA?


10
Вы забыли упомянуть ActionScript, который является диалектом ECMA, который не имеет ничего общего с тем, что вы могли бы назвать Javascript.
DaveRandom

4
Не так много для соответствия (как вы уже отметили), но jslint довольно хорош для проверки кода.
SomeKittens

2
@MadaraUchiha - я согласен, "просто используйте jQuery. Все будет хорошо". не будет в порядке. Вот почему я начал исследовать это. Мой сайт bharath.lohray.com хорошо работает на Chrome и Firefox, и валидатор W3C также не выдает никаких ошибок, но он отстой на новом IE! Более того, насколько мне нравится идея людей на anybrowser.org/campaign , я не могу быть действительно кроссбраузерной!
Лорд Ло.

7
Что касается вашей страницы, прокрутка очень раздражает и чрезмерно. Просто ИМО. И звание «Господь» звучит напыщенно, как ад, даже если вы на самом деле Господь.
NullUserException

11
Это излишне кричащее. Вы не видите сообщений, скользящих вверх и вниз на SE. Если это должен быть профессионально выглядящий веб-сайт, и вы все еще хотите переходы, используйте что-то более осторожное, например, постепенное появление / исчезновение.
NullUserException

Ответы:


96

Практически все зрелые языки определяются спецификацией, и компиляторы или интерпретаторы пытаются следовать стандарту, определенному в этой спецификации. Но очень редко они добиваются успеха, если стандарт не определен автором языка.

Вы можете найти стандарт C ++ 2003 , в C # 4 спецификации , в спецификации Java 7 и многое другое в Интернете. Многие из них имеют номера стандартизации ECMA или ISO. Это просто организации, в которых вы можете зарегистрировать стандарт и сделать его более официальным.

Исторически Ruby делал вещи немного по-другому, имея в качестве спецификации исполняемый набор тестов . Итак, если вы хотите написать интерпретатор и назвать его стандартным Ruby, вам просто нужно создать интерпретатор, который пройдет все эти тесты. Но даже Ruby в конечном итоге может стать более формальной спецификацией .

Javascript ничем не отличается, за исключением, возможно, в том, как он развивался.

Javascript был впервые создан Netscape. Они назвали его LiveScript, но он выглядел похожим на Java, и они заключили сделку с Sun по названию, что принесло пользу как маркетингу Netscape, так и Java. У Microsoft был VBScript и (по причинам, вероятно, ошибочным) предположительно скопировали Javascript, но имя принадлежало Sun, поэтому они нахально назвали его JScript.

Но JScript, хотя и очень похож на Javascript в синтаксисе, широко использовал COM - например, IE5 и 6 создают объект XMLHttpRequest с помощью new ActiveXObject("Microsoft.XMLHTTP");.

И так, параллельно, похожие, но и разные "диалекты" Javascript родились. Со временем различные группы, владеющие браузерами с меньшей долей рынка, чем IE, пытались стандартизировать язык, и в течение многих лет Microsoft сопротивлялась. До V8.

V8 был быстрым. Это установило совершенно новый рыночный стандарт. Все остальное выглядело плохо.

И, благодаря различным антимонопольным делам против Microsoft, IE терял долю рынка. Внезапно в интересах Microsoft поддержать стандартизацию. Мы еще не там, но это на правильном пути.

В то же время, V8 был открытым исходным кодом, что позволило людям начать придумывать новые способы применения для быстрого Javascript синтаксического анализа, такие как Node.js .

Но вернемся к вашему вопросу: что такое Javascript? Это общее (и оригинальное) имя для ECMAScript, спецификация для прототипного языка, обычно, но не исключительно, используемая для навигации и манипулирования объектной моделью домена в браузере.

ECMA-262 - это просто стандартное определение, как ECMA-334 - это стандартное определение для C #. ECMAScript был единственным названием, с которым могли согласиться все заинтересованные стороны, еще в 1999 году, когда была написана ECMA-262.


7
Если бы я мог высказать ваш ответ более одного раза, я бы так и сделал :-) Это помогает прояснить некоторые вещи. Аналогия с компиляторами C делает ситуацию немного понятной :-) За исключением того, что JavaScript не скомпилирован в двоичный файл, и конечные пользователи видят не / квазифункциональные сценарии. Итак, я должен понять, что не могу построить страницу по стандарту и надеюсь, что она будет работать во всех браузерах одинаково? (все же будучи оперативным словом).
Лорд Ло.

1
@LordLoh. Это верно. Но вы можете позволить библиотекам, таким как jQuery и Prototype, абстрагироваться от ваших различий.
фунтовые

Этот пост и исследование начались, когда анимация jQuery не работала на IE9, и я солгал идею кампании anybrowser.org и надеялся, что смогу придерживаться стандарта. HTML5 / CSS3 / JS. JS в конечном итоге, как ошибка в моем капоте.
Лорд Ло.

1
@LordLoh. Я не был бы настолько уверен, что это вина JQuery. Просто быстрый взгляд показывает проблемы с вашим HTML (например, отсутствующие кавычки), и когда вы минимизируете свой Javascript таким образом, могут быть странные результаты, если вы не очень точны. Я давно помню проблему, в которой я пропустил точку с запятой, и она перестала работать только после сжатия в одном из основных браузеров. jQuery довольно стабилен и должен хорошо работать с IE9.
фунтовые

5
@LordLoh. console.log это ваша проблема. Он не будет работать, если вы не откроете панель инструментов разработчика (и, следовательно, не создадите объект «консоль»).
фунтовые

23

Javascript - это широко используемая реализация ECMAScript. Это очень похоже на семью Схемы . В схеме у вас есть сильно формализованная спецификация. Текущая версия - R6RS, хотя R5RS на данный момент является наиболее распространенным стандартом. Реализации более разбросаны, чем ECMAScript, из-за возраста Схемы и общих принципов.

Javascript в настоящее время широко распространен в значительной степени из-за взрывного роста доли рынка как Mozilla Firefox, так и Google Chrome. Первоначально он закрепился благодаря Netscape Navigator, который в итоге превратился в браузер Mozilla, а затем в Firefox (и Iceweasel, если вы работаете с толпой Scheme).

Теперь вот где это становится немного рискованным. Большая часть производительности Javascript зависит от синтаксического анализатора и его движка. Здесь реальные различия между браузерами становятся очевидными. Spidermonkey запускает Javascript иначе, чем V8. В Javascript все еще есть неровности, такие как отсутствие полностью общей библиотеки, хотя над этим и работают.

Поэтому, если бы Javascript был C ++, тогда ECMAScript был бы C ++ 11, где UNIX и G ++ были бы ближе всего к «стандартному», в то время как C ++ для .NET и Objective C ++ лежат дальше, чем ActionScript из ECMAScript.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.