Чем отличаются Javascript и ECMAscript?

Здравствуй, Хабр.


Я студент ИТ-факультета, в редкие свободные минуты занимаюсь самообразованием и изучением различных вещей. Сейчас жизнь заставила начать осваивать Javascript. Когда начинаешь изучать любую технологию, важно хотя бы минимально знать, от чего она почковалась, и зачем была придумана. У меня возникла следующая трудность.


Чем Javascript отличается от ECMAscript? Кто на ком основан? Я хотел найти спецификацию Javascript, но нашел таковую только для ECMA-262. После слов о том, что «Javascript — реализация ECMAscript» у меня возникает закономерная мысль, что чем-то же эта реализация должна регламентироваться?

Кто разрабатывает обе технологии? Кто стандартизирует? И еще. К чему «Java» в Javascript?


Дорогой Хабр, извини, если вопрос покажется глупым. Я честно гуглил. С надеждой на ответ и все такое.
  • Вопрос задан
  • 18143 просмотра
Решения вопроса 1
@b0n3Z
Javascript — имплементация стандарта ECMAscript компанией Mozilla. Можно сказать, что это надмножество ECMAscript, потому что в нем есть такие штуки, как списковые выражения, короткие лямбда-функции, генераторы (yield), генераторные выражения, let — ключевое слово для создания более продвинутых локальных переменных (например, только в пределах цикла for), разрушающие присваивания ([a, b] = [b, a]).
Из популярных браузеров только Firefox поддерживает Javascript в полной мере, так что использовать все эти крутые возможности не стоит. Однако, как правило, все, что появляется у мозиллы вскоре появляется в официальном стандарте, то есть в ECMAscript — так было с JS1.6, откуда в стандарт перешли списковые методы map, filter, forEach, indexOf.
А JScript — имплементация стандарта ECMAscript корпорацией Microsoft.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
xanep
@xanep
Что было сначала — курица или яйцо? :)
Чтоб понимать как соотносятся Javascript и ECMAscript, нужно окунуться немного в историю. Javascript был создан как скриптовый язык для Netscape. Майкрософт создал свой скриптовый язык для IE, который назывался JScript. Естественно использовать 2 языка для разных браузеров было не кошерно и Netscape инициировало стандартизацию, в результате чего родился стандарт языка ECMAscript. ECMAscript не привязан к браузерам, сам по себе не имеет средств ввода/вывода. Последующие версии языков Javascript и JScript были приведены в соответствие стандарту ECMAscript. На основе этого стандарта также был создан ActionScript.
В итоге сегодня Javascript состоит из 3-х практически отдельных частей
— Ядро (полностью соответствует стандарту ECMAscript),
— Document Object model (DOM)
— Browser Object Model (BOM)
DOM — это API для достука к HTML. Его спецификацию вы можете найти на сайте W3C. BOM в каждом браузере реализован по своему. Соответственно вы найдете спецификацию Javascript от Mozilla (как наследницы Netscape) на их сайте. Отдельно можете почитать спецификации ECMAscript и DOM.
В итоге получается, что изначально стандарт ECMAscript был основан на Javascript, а потом Javascript основан на ECMAscript. Вот так запутанно :)
Ну а приставка Java — это маркетинговый ход. Java была очень на слуху в 90-х, поэтому и выбрали такое название. Точнее даже переименовали язык из LiveScript в Javascript.
Ответ написан
Gorthauer87
@Gorthauer87
Программист
Ну вот какая разница между классом и экземпляром класса?
Ответ написан
Melanitsky
@Melanitsky
Javascript являеться диалектом ECMAscript. ECMA это стандарт JavaScript. Им заниматься W3C.
А сам перефикс java только пиар ход.
Ответ написан
@w_serj
Если ядро javascript полностью соответствует ECMAscript, то объясните почему
true === ('0' == false).
Хотя в стандарте ECMA-262 5.1 june 2011 пункт 11.9.3 подпункт d сказано -
d. If Type(x) is String, then return true if x and y are exactly the same sequence of characters (same
length and same characters in corresponding positions). Otherwise, return false.

Знаю что у мозиллы написано совсем другое.
Equal (==)

If the two operands are not of the same type, JavaScript converts the operands then applies strict comparison. If either operand is a number or a boolean, the operands are converted to numbers if possible; else if either operand is a string, the other operand is converted to a string if possible. If both operands are objects, then JavaScript compares internal references which are equal when operands refer to the same object in memory.

(From Comparison Operators in Mozilla Developer Network)


Но кто в этом случае прав? И много ли еще подобных нюансов (если возможно с примерами)?
Chrome и firefox следуют указаниям мозиллы.
---
Вопрос снят. Буду внимательнее читать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы