- Приложение B
- (информативное)
- Совместимость
- B.1 Дополнительный синтаксис
-
Предыдущие версии ECMAScript включали дополнительный синтаксис и семантику для указания восьмеричных литералов и восьмеричных escape-последовательностей. Они были удалены из данной редакции ECMAScript. Это ненормативное приложение представляет единый синтаксис и семантику для восьмеричных литералов и восьмеричных escape-последовательностей для совместимости со старыми программами на ECMAScript.
- B.1.1 Численные литералы
-
Синтаксис и семантика раздела 7.8.3 могут быть расширены согласно следующему описанию:
Синтаксис
- ЧисленныйЛитерал ::
- ДесятичныйЛитерал
ШестнадцатеричныйЦелыйЛитерал
ВосьмеричныйЦелыйЛитерал
- ВосьмеричнаяЦифра :: одна из
-
0
1
2
3
4
5
6
7
- ВосьмеричныйЦелыйЛитерал ::
- 0 ВосьмеричнаяЦифра
ВосьмеричныйЦелыйЛитерал ВосьмеричнаяЦифра
Семантика
- МЗ ЧисловогоЛитерала :: ВосьмеричногоЦелогоЛитерала равняется МЗ ВосьмеричногоЦелогоЛитерала.
- МЗ ВосьмеричнойЦифры :: 0 равно 0.
- МЗ ВосьмеричнойЦифры :: 1 равно 1.
- МЗ ВосьмеричнойЦифры :: 2 равно 2.
- МЗ ВосьмеричнойЦифры :: 3 равно 3.
- МЗ ВосьмеричнойЦифры :: 4 равно 4.
- МЗ ВосьмеричнойЦифры :: 5 равно 5.
- МЗ ВосьмеричнойЦифры :: 6 равно 6.
- МЗ ВосьмеричнойЦифры :: 7 равно 7.
- МЗ ВосьмеричногоЦелогоЛитерала :: 0 ВосьмеричнойЦифры равно МЗ ВосьмеричнойЦифры.
- МЗ ВосьмеричногоЦелогоЛитерала :: ВосьмеричногоЦелогоЛитерала ВосьмеричнойЦифры равно сумме (МЗ ВосьмеричногоЦелогоЛитерала умноженной на 8) и МЗ ВосьмеричнойЦифры.
- B.1.2 Строковые литералы
-
Синтаксис и семантика раздела 7.8.4 могут быть расширены согласно следующему описанию:
Синтаксис
- EscapeПоследовательность ::
- СимвольнаяEscapeПоследовательность
ВосьмеричнаяEscapeПоследовательность
ШестнадцатеричнаяEscapeПоследовательность
ЮникоднаяEscapeПоследовательность
- ВосьмеричнаяEscapeПоследовательность ::
- ВосьмеричнаяЦифра [предпросмотр ∉ ДесятичнаяЦифра]
ОтНуляДоТрёх ВосьмеричнаяЦифра [предпросмотр ∉ ДесятичнаяЦифра]
ОтЧетырёхДоСеми ВосьмеричнаяЦифра
ОтНуляДоТрёх ВосьмеричнаяЦифра ВосьмеричнаяЦифра
- ОтНуляДоТрёх :: одна из
- 0 1 2 3
- ОтЧетырёхДоСеми :: одна из
- 4 5 6 7
Семантика
- СиЗ EscapeПоследовательности :: ВосьмеричнойEscapeПоследовательности равно СиЗ ВосьмеричнойEscapeПоследовательности.
- СиЗ ВосьмеричнойEscapeПоследовательности :: ВосьмеричнойЦифры [предпросмотр ∉ ДесятичнойЦифре] равно символу, код которого равняется МЗ ВосьмеричнойЦифры.
- СиЗ ВосьмеричнойEscapeПоследовательности :: ОтНуляДоТрёх ВосьмеричнойЦифры [предпросмотр ∉ ДесятичнойЦифре] равно символу, код которого равняется сумме (МЗ ОтНуляДоТрёх, умноженного на 8) и МЗ ВосьмеричнойЦифры.
- СиЗ ВосьмеричнойEscapeПоследовательности :: ОтЧетырёхДоСеми ВосьмеричнойЦифры равно символу, код которого равняется сумме (МЗ ОтЧетырёхДоСеми, умноженного на 8) и МЗ ВосьмеричнойЦифры.
- СиЗ ВосьмеричнойEscapeПоследовательности :: ОтНуляДоТрёх ВосьмеричнойЦифры ВосьмеричнойЦифры равно символу, код которого равняется сумме (МЗ ОтНуляДоТрёх, умноженного на 64 (т.е., 82 ) ), (МЗ первой ВосьмеричнойЦифры, умноженной на 8) и МЗ второй ВосьмеричнойЦифры.
- МЗ ОтНуляДоТрёх :: 0 равно 0.
- МЗ ОтНуляДоТрёх :: 1 равно 1.
- МЗ ОтНуляДоТрёх :: 2 равно 2.
- МЗ ОтНуляДоТрёх :: 3 равно 3.
- МЗ ОтЧетырёхДоСеми :: 4 равно 4.
- МЗ ОтЧетырёхДоСеми :: 5 равно 5.
- МЗ ОтЧетырёхДоСеми :: 6 равно 6.
- МЗ ОтЧетырёхДоСеми :: 7 равно 7.
- B.2 Дополнительные свойства
-
Некоторые реализации ECMAScript включили дополнительные свойства для стандартных встроенных объектов. Это ненормативное приложение предлагает единую семантику для таких свойств, при этом не включая эти свойства в качестве части стандарта.
- B.2.1 escape (string)
-
Функция escape является свойством глобального объекта. Она вычисляет новую версию строкового значения, для которой некоторые символы были заменены на шестнадцатеричные escape-последовательности.
Для таких заменяемых символов, коды которых меньше или равны 0xFF, используется двухциферная escape-последовательность вида %xx. Для таких заменяемых символов, коды которых больше 0xFF, используется четырёхциферная escape-последовательность вида %uxxxx.
Когда функция escape вызывается с единственным аргументом string, предпринимаются следующие шаги:
1. Вызвать ToString(string).
2. Подсчитать количество символов в Результате(1).
3. Пусть R равно пустой строке.
4. Пусть k равно 0.
5. Если k равняется Результату(2), вернуть R.
6. Получить символ (представленный как 16-битное беззнаковое целое) на позиции k в строке Результат(1).
7. Если Результат(6) является одним из 69 непробельных символов "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@*_+-./ " - переход на шаг 13.
8. Если Результат(6) меньше 256 - переход на шаг 11.
9. Пусть S - строка, состоящая из шести символов "%uwxyz", где wxyz - четыре шестнадцатиричные цифры, кодирующие значение Результата(6).
10. Переход на шаг 14.
11. Пусть S равно строке, содержащей три символа "%xy", где xy - две шестнадцатеричные цифры, кодирующие значение Результата(6).
12. Переход на шаг 14.
13. Пусть S - строка, содержащая единственный символ Результат(6).
14. Пусть R - новое строковое значение, получаемое конкатенацией предыдущего значения R и S.
15. Увеличить k на 1. 16. Переход на шаг 5.
ЗАМЕЧАНИЕ
Это кодирование частично основан на кодировании, описанном в RFC1738, но весь процесс кодирования в данном стандарте описан выше без ссылки на RFC1738.
- B.2.2 unescape (string)
-
Функция unescape является свойством глобального объекта. Она вычисляет новую версию строкового значения, в которой escape-последовательности такого вида, какого могли бы быть введены функцией escape, заменяются на символы, которые они представляют.
Когда функция unescape вызывается с единственным аргументом string, предпринимаются следующие шаги:
1. Вызвать ToString(string).
2. Подсчитать количество символов в Результате(1).
3. Пусть R равно пустой строке.
4. Пусть k равно 0.
5. Если k равняется Результату(2), вернуть R.
6. Пусть c - символ на позиции k в строке Результат(1).
7. Если c не % - переход на шаг 18.
8. Если k больше, чем Результат(2)-6 - переход на шаг 14.
9. Если символ на позиции k+1 в Результате(1) не равен u, - переход на шаг 14.
10. Если четыре символа на позициях k+2, k+3, k+4 и k+5 в Результате(1) не являются шестнадцатеричными цифрами - переход на шаг 14.
11. Пусть c - символ, значение которого является целым, представленным четырьмя шестнадцатеричными цифрами на позициях k+2, k+3, k+4 и k+5 в строке Результат(1).
12. Увеличить k на 1.
13. Переход на шаг 18.
14. Если k больше, чем Результат(2)-3 - переход на шаг 18.
15. Если два символа на позициях k+1 и k+2 в строке Результат(1) не являются оба шестнадцатеричными цифрами - переход на шаг 18.
16. Пусть c - символ, код которого представляется двумя нулями и двумя шестнадцатеричными цифрами на позициях k+1 и k+2 в строке Результат(1).
17. Увеличить k на 2.
18. Пусть R - новое строковое значение, получаемое конкатенацией предыдущего значения R и c.
19. Увеличить k на 1.
20. Переход на шаг 5.
- B.2.3 String.prototype.substr (start, length)
-
Метод substr принимает два аргумента start и length, преобразовывает данный объект к строке и возвращает её подстроку, начинающуюся с символа на позиции start и включающую length символов (или продолжающуюся до конца строки, если length равно undefined). Если start отрицательно, вместо него используется значение (sourceLength+ start), где sourceLength равно длине строки. Результатом является строковое значение (не объект String). Предпринимаются следующие шаги:
1. Вызвать ToString, передав ему значение this в качестве аргумента.
2. Вызвать ToInteger(start).
3. Если length равно undefined, использовать +∞ ; иначе вызвать ToInteger(length).
4. Подсчитать количество символов в Результате(1).
5. Если Результат(2) положителен или равен нулю - использовать Результат(2). Иначе использовать max(Результат(4)+ Результат(2), 0).
6. Вычислить min(max(Результат(3), 0), Результат(4)- Результат(5)).
7. Если Результат(6) <= 0 - вернуть пустую строку "".
8. Вернуть строку, содержащую Результат(6) последовательных символов Результата(1), начинающихся с символа на позиции Результат(5).
Свойство length метода substr равно 2.
ЗАМЕЧАНИЕ
Функция substr специально сделана не привязанной к типу. Она не требует, чтобы её значение this было объектом типа String. Таким образом, она может быть передана другим типам объектов для использования в качестве метода.
- B.2.4 Date.prototype.getYear()
-
ЗАМЕЧАНИЕ
В большинстве случаев предпочтительнее использовать метод getFullYear, поскольку он позволяет избежать "проблемы года 2000".
Когда метод getYear вызывается без аргументов, предпринимаются следующие шаги:
1. Пусть t - данное значение времени.
2. Если t равно NaN - вернуть NaN.
3. Вернуть ГодДляВремени(МестноеВремя(t))-1900.
- B.2.5 Date.prototype.setYear(year)
-
ЗАМЕЧАНИЕ
В большинстве случаев предпочтительнее использовать метод setFullYear, поскольку он позволяет избежать "проблемы года 2000".
Когда метод setYear вызывается с единственным аргументом year, предпринимаются следующие шаги:
1. Пусть t - результат выражения МестноеВремя(данное значение времени). Но если данное значение времени равно NaN, взять в качестве t +0.
2. Вызвать ToNumber(year).
3. Если Результат(2) равен NaN, установить значение свойства [[Value]] значения this равным NaN и вернуть NaN.
4. Если Результат(2) не равен NaN и 0 <= ToInteger(Результат(2)) <= 99, то Результат(4) равен ToInteger(Результат(2)) + 1900. Иначе Результат(4) равен Результату(2).
5. Вычислить СоставитьДень(Результат(4), МесяцДляВремени(t), ДатаДляВремени(t)).
6. Вычислить UTC(СоставитьДату(Результат(5), ВремяДня(t))).
7. Установить свойство [[Value]] значения this равным ОграничитьВремя(Результат(6)).
8. Вернуть значение свойства [[Value]] значения this.
- B.2.6 Date.prototype.toGMTString()
-
ЗАМЕЧАНИЕ
Предпочтительнее использовать свойство toUTCString. Свойство toGMTString введено исключительно для совместимости со старым кодом. В новом коде на ECMAScript рекомендуется использовать свойство toUTCString.
Объект Function, являющийся начальным значением свойства Date.prototype.toGMTString является тем же объектом Function, что и Date.prototype.toUTCString.