Javascript.RU

Стандарт ECMA-262, 3я редакция

Update: Более новый материал по этой теме находится по адресу http://es5.javascript.ru.

© Ecma International 1999.
Перевод стандарта ECMA-262, 3rd edition 1999.

Данный перевод является официальным и согласован с ECMA.

Скачать оффлайн-вариант в формате CHM

Краткая история

Этот стандарт ECMA основан на нескольких технологиях, самые известные из которых - JavaScript (Netscape) и JScript (Microsoft). Язык был изобретен Brendan Eich в Netscape и впервые появился в браузере этой компании Navigator 2. В дальнейшем он присутствовал во всех браузерах от Netscape и всех - от Microsoft, начиная с Internet Explorer 3.0, и так - до наших дней.

Разработка этого стандарта началась в ноябре 1996г. Первая редакция стандарта ECMA была принята общим собранием ECMA в июне 1997г.

Стандарт ECMA был отослан в ISO/IEC JTC 1 для быстрого согласования и одобрен как международный стандарт ISO/IEC 16262 в апреле 1998г. В июне 1998 года общее собрание ECMA одобрило вторую редакцию ECMA-262, чтобы поддерживать соответствие с ISO/IEC 16262. Изменения между первой и второй редакцией - по сути редакторские правки.

Настоящий документ описывает третью редакцию стандарта и включает в себя мощные регулярные выражения, улучшенную поддержку строк, новые управляющие конструкции, обработку исключений try/catch, конкретизированное определение ошибок, форматирование при численном выводе и небольшие изменения для приближающейся интернационализации и будущего роста языка.

Работа над языком не завершена. Технический комитет работает над значительными улучшениями, включая механизмы для создания и использования скриптов в интернет и улучшенную координацию с другими разработчиками стандартов, такими как группы в консорциуме W3C и Wireless Application Protocol Forum.

Этот стандарт был принят как 3-я редакция ECMA-262 общим собранием ECMA в декабре 1999 года.

Спецификация ECMA. Содержание

  • 1. Сфера применения
  • 2. Соответствие
  • 3. Ссылки
  • 4. Общее описание
    • 4.1 Скрипты для Web
    • 4.2 Общее описание языка
    • 4.3 Определения
      • 4.3.1 Тип
      • 4.3.2 Элементарное значение
      • 4.3.3 Объект
      • 4.3.4 Конструктор
      • 4.3.5 Прототип
      • 4.3.6 Встроенные объекты
      • 4.3.7 Встроенный объект
      • 4.3.8 Объект среды
      • 4.3.9 Неопределённое значение
      • 4.3.10 Неопределённый тип
      • 4.3.11 Пустое значение
      • 4.3.12 Тип Null
      • 4.3.13 Булевское значение
      • 4.3.14 Тип Boolean
      • 4.3.15 Объект Boolean
      • 4.3.16 Строковое значение
      • 4.3.17 Тип String
      • 4.3.18 Объект String
      • 4.3.19 Численное значение
      • 4.3.20 Тип Number
      • 4.3.21 Объект Number
      • 4.3.22 Бесконечность
      • 4.3.23 NaN
  • 5. Соглашения о наименованиях
    • 5.1 Синтаксические и лексические грамматики
      • 5.1.1 Контекстно-свободные грамматики
      • 5.1.2 Лексические и регулярные грамматики
      • 5.1.3 Численная строковая грамматика
      • 5.1.4 Синтаксическая грамматика
      • 5.1.5 Нотация грамматики
    • 5.2 Соглашения по алгоритмам
  • 6. Исходный текст
  • 7. Лексические соглашения
    • 7.1 Символы форматирования Юникода
    • 7.2 Пробел
    • 7.3 Разделители строк
    • 7.4 Комментарии
    • 7.5 Токены
      • 7.5.1 Зарезервированные слова
      • 7.5.2 Ключевые слова
      • 7.5.3 Слова, зарезервированные для будущего использования
    • 7.6 Идентификатор
    • 7.7 Знаки препинания
    • 7.8 Литералы
      • 7.8.1 Литералы Null
      • 7.8.2 Булевские литералы
      • 7.8.3 Числовые литералы
      • 7.8.4 Строковые литералы
      • 7.8.5 Литералы регулярных выражений
    • 7.9 Автоматическая вставка точек с запятыми
      • 7.9.1 Правила автоматической вставки точек с запятыми
      • 7.9.2 Примеры автоматической вставки точек с запятой
  • 8. Типы
    • 8.1 Тип Undefined
    • 8.2 Тип Null
    • 8.3 Тип Boolean
    • 8.4 Тип String
    • 8.5 Тип Number
    • 8.6 Тип Object
      • 8.6.1 Атрибуты свойства
      • 8.6.2 Внутренние свойства и методы
    • 8.7 Тип Reference
      • 8.7.1 ПолучитьЗначение(V)
      • 8.7.2 ЗаписатьЗначение(V, W)
    • 8.8 Тип List
    • 8.9 Тип Completion
  • 9. Преобразование типов
    • 9.1 ToPrimitive
    • 9.2 ToBoolean
    • 9.3 ToNumber
      • 9.3.1 ToNumber применённый к типу String
    • 9.4 ToInteger
    • 9.5 ToInt32: (Знаковое 32-разрядное целое)
    • 9.6 ToUint32: (Беззнаковое 32-разрядное целое)
    • 9.7 ToUint16: (Беззнаковое 16-разрядное целое)
    • 9.8 ToString
      • 9.8.1 ToString применённый к типу Number
    • 9.9 ToObject
  • 10. Контексты исполнения
    • 10.1 Определения
      • 10.1.1 Объекты типа Function
      • 10.1.2 Типы исполняемого кода
      • 10.1.3 Инициализация переменных
      • 10.1.4 Иерархия областей видимости и разрешение идентификаторов
      • 10.1.5 Глобальный объект
      • 10.1.6 Объект активации
      • 10.1.7 This
      • 10.1.8 Объект аргументов
    • 10.2 Вход в контекст исполнения
  • 11. Выражения
    • 11.1 Первичные выражения
      • 11.1.1 Ключевое слово this
      • 11.1.2 Ссылка на идентификатор
      • 11.1.3 Ссылка на литерал
      • 11.1.4 Инициализатор массива
      • 11.1.5 Инициализатор объекта
      • 11.1.6 Оператор группировки
    • 11.2 Левосторонние выражения
      • 11.2.1 Доступ к свойствам
      • 11.2.2 Оператор new
      • 11.2.3 Вызовы функций
      • 11.2.4 Списки аргументов
      • 11.2.5 Выражения функций
    • 11.3 Постфиксные выражения
      • 11.3.1 Постфиксный оператор инкремента
      • 11.3.2 Постфиксный оператор декремента
    • 11.4 Унарные операторы
      • 11.4.1 Оператор delete
      • 11.4.2 Оператор void
      • 11.4.3 Оператор typeof
      • 11.4.4 Префиксный оператор инкремента
      • 11.4.5 Префиксный оператор декремента
      • 11.4.6 Унарный оператор +
      • 11.4.7 Унарный оператор -
      • 11.4.8 Побитовый оператор НЕ ( ~ )
      • 11.4.9 Логический оператор НЕ ( ! )
    • 11.5 Мультипликативные операторы
      • 11.5.1 Действие оператора *
      • 11.5.2 Действие оператора /
      • 11.5.3 Действие оператора %
    • 11.6 Синтаксис аддитивных операторов
      • 11.6.1 Оператор сложения ( + )
      • 11.6.2 Оператор вычитания ( - )
      • 11.6.3 Действие аддитивных операторов ( +, - ) в применении к объектам типа Number
    • 11.7 Операторы побитового сдвига
      • 11.7.1 Оператор сдвига влево ( << )
      • 11.7.2 Оператор знакового сдвига вправо ( >> )
      • 11.7.3 Оператор беззнакового сдвига вправо ( >>> )
    • 11.8 Операторы отношения
      • 11.8.1 Оператор меньше-чем ( < )
      • 11.8.2 Оператор больше-чем ( > )
      • 11.8.3 Оператор меньше или равно ( <= )
      • 11.8.4 Оператор больше-или-равно ( >= )
      • 11.8.5 Абстрактный алгоритм сравнения для отношений
      • 11.8.6 Оператор instanceof
      • 11.8.7 Оператор in
    • 11.9 Операторы равенства
      • 11.9.1 Оператор равенства ( == )
      • 11.9.2 Оператор не-равно ( != )
      • 11.9.3 Абстрактный алгоритм сравнения для равенств
      • 11.9.4 Оператор строгого равенства ( === )
      • 11.9.5 Оператор строгого неравенства ( !== )
      • 11.9.6 Алгоритм сравнения строгого равенства
    • 11.10 Двоичные побитовые операторы
    • 11.11 Бинарные логические операторы
    • 11.12 Условный оператор ( ?: )
    • 11.13 Операторы присваивания
      • 11.13.1 Простое присваивание ( = )
      • 11.13.2 Составное присваивание ( op= )
    • 11.14 Оператор-запятая ( , )
  • 12. Инструкции
    • 12.1 Блок
    • 12.2 Выражение переменной
    • 12.3 Пустая инструкция
    • 12.4 Инструкция-выражение
    • 12.5 Инструкция if
    • 12.6 Инструкции итерации
    • 12.6.1 Инструкция do-while
    • 12.6.2 Инструкция while
    • 12.6.3 Инструкция for
    • 12.6.4 Инструкция for-in
    • 12.7 Инструкция continue
    • 12.8 Инструкция break
    • 12.9 Инструкция return
    • 12.10 Инструкция with
    • 12.11 Инструкция switch
    • 12.12 Инструкции с метками
    • 12.13 Инструкция throw
    • 12.14 Инструкция try
  • 13. Определение функции
    • 13.1 Определения
      • 13.1.1 Тождественные правила грамматики
      • 13.1.2 Объединённые объекты
    • 13.2 Создание объектов типа Function
  • 14. Программа
  • 15. Встроенные объекты ECMAScript
    • 15.1 Глобальный объект
      • 15.1.1 Свойства-значения глобального объекта
      • 15.1.2 Свойства-функции глобального объекта
      • 15.1.3 Свойства-функции для обработки URI
      • 15.1.4 Свойства-конструкторы глобального объекта
      • 15.1.5 Другие свойства глобального объекта
    • 15.2 Объекты Object
      • 15.2.1 Вызов конструктора Object как функции
      • 15.2.2 Конструктор Object
      • 15.2.3 Свойства конструктора Object
      • 15.2.4 Свойства объекта-прототипа Object
      • 15.2.5 Свойства экземпляров Object
    • 15.3 Объекты типа Function
      • 15.3.1 Вызов конструктора Function как функции
      • 15.3.2 Конструктор Function
      • 15.3.3 Свойства конструктора Function
      • 15.3.4 Свойства объекта-прототипа Function
      • 15.3.5 Свойства экземпляров Function
    • 15.4 Объекты Array
      • 15.4.1 Вызов конструктора Array как функции
      • 15.4.2 Конструктор Array
      • 15.4.3 Свойства конструктора Array
      • 15.2.4 Свойства объекта-прототипа Array
      • 15.4.5 Свойства экземпляров Array
    • 15.5 Объекты типа String
      • 15.5.1 Вызов конструктора String как функции
      • 15.5.2 Конструктор String
      • 15.5.3 Свойства конструктора String
      • 15.5.4 Свойства объекта-прототипа String
      • 15.5.5 Свойства экземпляров String
    • 15.6 Объекты типа Boolean
      • 15.6.1 Вызов конструктора Boolean как функции
      • 15.6.2 Конструктор Boolean
      • 15.6.3 Свойства конструктора Boolean
      • 15.6.4 Свойства объекта-прототипа Boolean
      • 15.6.5 Свойства экземпляров Boolean
    • 15.7 Объекты типа Number
      • 15.7.1 Вызов конструктора Number как функции
      • 15.7.2 Конструктор Number
      • 15.7.3 Свойства конструктора Number
      • 15.7.4 Свойства объекта-прототипа Number
      • 15.7.5 Свойства экземпляров Number
    • 15.8 Объект Math
      • 15.8.1 Свойства-значения объекта Math
      • 15.8.2 Свойства-функции объекта Math
    • 15.9 Объекты типа Date
      • 15.9.1 Общие сведения об объектах типа Date и определения внутренних операторов
      • 15.9.2 Вызов конструктора Date как функции
      • 15.9.3 Конструктор Date
      • 15.9.4 Свойства конструктора Object
      • 15.9.5 Свойства объекта-прототипа Date
      • 15.9.6 Свойства экземпляров Date
    • 15.10 Объекты типа RegExp (регулярные выражения)
      • 15.10.1 Шаблоны
      • 15.10.2 Семантика шаблонов
      • 15.10.3 Вызов конструктора RegExp как функции
      • 15.10.4 Конструктор RegExp
      • 15.10.5 Свойства конструктора RegExp
      • 15.10.6 Свойства объекта-прототипа RegExp
      • 15.10.7 Свойства экземпляров RegExp
    • 15.11 Объекты Error
      • 15.11.1 Вызов конструктора Error как функции
      • 15.11.2 Конструктор Error
      • 15.11.3 Свойства конструктора Error
      • 15.11.4 Свойства объекта-прототипа Error
      • 15.11.5 Свойства экземпляров Error
      • 15.11.6 Встроенные типы ошибок, использованные в данном стандарте
      • 15.11.7 Структура объекта типа NativeError
    • 16. Ошибки
    • Приложение A - Описание грамматик
    • Приложение B - Совместимость
Дополнительно: Глоссарий англоязычных терминов.

Автор: stazis (не зарегистрирован), дата: 2 марта, 2009 - 17:14
#permalink

хм, я в js нубяра(( поэтому Х что пойму...но исправлюсь и тогда оставлю более информационносодержащий камент)


Автор: Гость (не зарегистрирован), дата: 12 марта, 2009 - 18:21
#permalink

Умоляю, сделайте многостраничный PDF, чтобы был всегда рядом в смартфоне и на досуге можно было бы почитать или залезть как в справочник.


Автор: Potart (не зарегистрирован), дата: 23 марта, 2009 - 03:46
#permalink

Материал хороший. Но хотелось бы видеть его в pdf или другом виде. Просто доступ в Интернет не всегда есть под рукой.


Автор: zm8, дата: 24 марта, 2009 - 14:22
#permalink

Благодарю Вас за этот труд! Очень полезное чтение, проясняет лучше некуда.
----------------------------------------
window.open(window.location);


Автор: Анатолий Ермолов, дата: 28 марта, 2009 - 20:45
#permalink

Спасибо огромное авторам перевода.


Автор: Newone, дата: 14 апреля, 2009 - 14:27
#permalink

Благодарю за портабл версию =)


Автор: Гость (не зарегистрирован), дата: 13 мая, 2009 - 00:16
#permalink

"этот комментарий анонима"
Здесь не зарегистрирован. Вы еще карательные операции проводите что ли .

Да, насчет ссылок погорячился, большинство работает. Может с первого раза попались нерабочие, но 11.13.2 точно не работает, вроде еще были.

"Пдф читабельный"
Я и не утверждал обратного, прочитать можно.

"Перевод счёл очень качественным"
Как Вы думаете, приведенная ниже часть текста написана по-русски? Т.е. не просто кириллицей с использованием слов русского языка.

11.9.2 Оператор не-равно ( != )

Значение нетерминала ВыражениеРавенства : ВыражениеРавенства != ВыражениеОтношения вычисляется по следующей схеме:

1. Вычислить ВыражениеРавенства.

2. Вызвать ПолучитьЗначение(Результата(1)).

3. Вычислить значение ВыраженияОтношения.

4. Вызвать ПолучитьЗначение(Результата(3)).

5. Выполнить сравнение Результат(4) == Результат(2) (см. раздел 11.9.3).

6. Если Результат(5) равен true - вернуть false. Иначе вернуть true.

А вообще, смысл всего выше написанного в том, что если уж решили потратить время на перевод, то можно было подойти к этому делу более ответственно. Тем более что: "Данный перевод является официальным и согласован с ECMA".


Автор: Zeroglif, дата: 13 мая, 2009 - 08:02
#permalink

> Как Вы думаете, приведенная ниже часть текста написана по-русски? Т.е. не просто кириллицей с использованием слов русского языка.

Это технический перевод алгоритмов, много специальных внутренних терминов, названий свойств. Оформлять такой перевод художественно (понятно) - преступление. К слову, оригинальный текст не менее сложен.


Автор: Илья Кантор, дата: 13 мая, 2009 - 09:28
#permalink

Это - адекватный перевод оригинального текста. Именно адекватный, в смысле, принятом у проф. переводчиков.

Выделенный вами отрывок текста переведен очень грамотно. Не хуже перевода Д. Кнута от издательства "Мир".


Автор: Гость (не зарегистрирован), дата: 19 июня, 2009 - 10:24
#permalink

Компиляторы-трансляторы... нормально все написано, кто не поймет, вернется к статье позже, для людей с методом роботы копипаст, статья возможно не подойдет, для тех кто варит, не по памяти, а реально оказавшись в ситуации - все нормально!


Автор: Гость (не зарегистрирован), дата: 15 мая, 2009 - 20:55
#permalink

"Этот стандарт ECMA основан на нескольких технологиях, самые известные из которых - JavaScript (Netscape) и JScript (Microsoft)." - а не наоборот?


Автор: Zeroglif, дата: 15 мая, 2009 - 21:38
#permalink

Не наоборот. Сначала появились языки, за ними стандарт.


Автор: Гость (не зарегистрирован), дата: 19 июня, 2009 - 10:27
#permalink

Возможно использование двух форма порядка. 1. Хронологическая (кто появился первый, кто позже, кто последний); 2. Проблемно-ориентационная (перечисление по необходимости).


Автор: Илья Кантор, дата: 18 июня, 2009 - 13:44
#permalink

UPDATE: свежая оффлайн-версия. Формат CHM вместо PDF по многочисленным просьбам.


Автор: Гость (не зарегистрирован), дата: 29 октября, 2009 - 11:49
#permalink

Пожалуйста, выкладывайте так же и PDF, если вам не трудно :-)


Автор: Илья Кантор, дата: 29 октября, 2009 - 20:21
#permalink

Может, посоветуете конвертер из CHM в PDF ?


Автор: Гость (не зарегистрирован), дата: 13 ноября, 2009 - 10:22
#permalink

где сам chm то? удалось скачать пдф, но для быстрой навигации он менее удобен


Автор: Гость (не зарегистрирован), дата: 13 ноября, 2009 - 10:23
#permalink

нашёл, прошу прощения =)


Автор: Denjs (не зарегистрирован), дата: 26 февраля, 2010 - 18:13
#permalink

Спасибо. очень нужный перевод.

Собираюсь включить переработанную (адаптированную/упрощенную/приглаженную) версию данного описания в комплект документации QtScript-фреймворка QDroid в одном из следующих релизов. Обратная ссылка будет присутствовать в обязательном порядке.

PS: QtScript - это скриптовый язык основанный на ECMA-262 (с некоторыми дополнениями) для использования в программах написанных с использованием библиотеки QT и C++.

PPS: ещё раз спасибо авторам за перевод.


Автор: Илья Кантор, дата: 14 августа, 2010 - 19:35
#permalink

UPDATE: оффлайн версия 1.1


Автор: hacpaka, дата: 22 августа, 2010 - 21:52
#permalink

Хороший перевод. Чертовски хороший перевод, хотя некоторые "индивидуумы", теоретически со мной могут не согласиться, ввиду неприятия подобного языка изложения. Но у меня для них есть сюрприз - в оригинале такой же язык изложения. ))
В общем - респект. Все в одном месте. Это здорово))). Буду использовать как шпаргалку - таки всего не упомнишь, да и не надо оно до поры до времени, зачастую...


Автор: Azadi, дата: 26 сентября, 2010 - 08:17
#permalink

Не подскажете, 5-я редакция сильно отличается от данного перевода?


Автор: Гость (не зарегистрирован), дата: 18 февраля, 2011 - 18:59
#permalink

Подскажите пожалуйста, что означает такая конструкция кода:

rocket.params =
{
direction: { 'x': 1, 'y': 1},
borders:
{
'x': document.body.clientWidth - rocket.offsetWidth,
'y': document.body.clientHeight - rocket.offsetHeight
}
}

rocket.params - это объект, а direction, borders - это его свойства?


Автор: unel (не зарегистрирован), дата: 4 мая, 2011 - 10:29
#permalink

что за подлость? и зачем мне в линуксе и моей читалке chm? верните pdf, или хотя бы выкладывайте оба варианта! =(


Автор: kidar2, дата: 18 марта, 2012 - 13:07
#permalink

А есть где-то перевод 5ой редакции?


Автор: xchesh (не зарегистрирован), дата: 22 мая, 2012 - 10:13
#permalink

Пятая редакция вышла, а вот перевода нету. Когда же? и желательно в pdf бы...


Автор: Алма (не зарегистрирован), дата: 10 марта, 2015 - 07:13
#permalink

Данный перевод является официальным и согласован с ECMA

Илья, это вы переводили эту документацию на русский?


Автор: teelosa (не зарегистрирован), дата: 2 ноября, 2022 - 06:36
#permalink

Это вся полезная информация ECMA-262 потому что я был так занят игрой в tunnel rush что многое пропустил. мне нравится этот пост


 
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние темы на форуме
Forum