view xml/ru/docs/njs/reference.xml @ 2532:423d813dc8bb

Documented support for multi-value headers in r.headersOut.
author Yaroslav Zhuravlev <yar@nginx.com>
date Thu, 23 Apr 2020 12:57:43 +0100
parents 6ce28e0beec0
children d6bbfd20c82f
line wrap: on
line source

<?xml version="1.0"?>

<!--
  Copyright (C) Nginx, Inc.
  -->

<!DOCTYPE article SYSTEM "../../../../dtd/article.dtd">

<article name="Справочник"
        link="/ru/docs/njs/reference.html"
        lang="ru"
        rev="1">

<section id="summary">

<para>
<link doc="index.xml">njs</link> предоставляет объекты, методы и свойства
для расширения функциональности nginx.
</para>

</section>


<section id="http_stream" name="Объекты nginx">


<section id="http" name="HTTP-запрос">

<para>
Объект <literal>HTTP</literal> доступен только в
модуле <link doc="../http/ngx_http_js_module.xml">ngx_http_js_module</link>.
Все строки в объекте <literal>HTTP</literal> являются
<link id="string">байтовыми строками</link>.

<list type="tag">

<tag-name id="r_args"><literal>r.args{}</literal></tag-name>
<tag-desc>
объект аргументов запроса, только чтение
</tag-desc>

<tag-name><literal>r.error(<value>строка</value>)</literal></tag-name>
<tag-desc>
записывает <literal>строку</literal> в лог-файл ошибок
на уровне лога <literal>error</literal>
</tag-desc>

<tag-name><literal>r.finish()</literal></tag-name>
<tag-desc>
завершает отправку ответа клиенту
</tag-desc>

<tag-name id="r_headers_in"><literal>r.headersIn{}</literal></tag-name>
<tag-desc>
объект входящих заголовков, только чтение.
<para>
Например, доступ к заголовку <literal>Foo</literal>
можно получить при помощи синтаксиса <literal>headersIn.foo</literal>
или <literal>headersIn['Foo']</literal>
<note>
До версии <link doc="changes.xml" id="njs0.3.6">0.3.6</link>
если заголовок был указан несколько раз, например
<header>Cookie</header> или <header>X-Forwarded-For</header>,
то возвращалось только первое значение.
Чтобы получить все cookie
необходимо использовать
<literal>r.variables.http_cookie</literal>.
Чтобы получить <literal>имя</literal> cookie
необходимо использовать
<literal>r.variables["cookie_<value>имя</value>"]</literal>.
</note>
</para>
</tag-desc>

<tag-name id="r_headers_out"><literal>r.headersOut{}</literal></tag-name>
<tag-desc>
объект исходящих заголовков, доступно для записи.
<para>
Доступ к заголовку ответа <literal>Foo</literal>
можно получить при помощи синтаксиса:
<literal>headersOut.foo</literal> или <literal>headersOut['Foo']</literal>
</para>

<para>
Значения полей многозначных заголовков ответа
(<link doc="changes.xml" id="njs0.4.0">0.4.0</link>)
можно задать при помощи синтаксиса:
<example>
r.headersOut[‘Foo’] = [‘a’, ‘b’]
</example>
результат:
<example>
Foo: a
Foo: b
</example>
Все предыдущие значения поля заголовка ответа <header>Foo</header>
будут удалены.
</para>

<para>
В стандартных заголовках ответа,
поля которых могут принимать только одно значение, например
<header>Content-Type</header>,
учитывается только последний элемент массива.
Дубликаты значений поля в заголовках ответа
<header>Age</header>,
<header>Content-Encoding</header>,
<header>Content-Length</header>,
<header>Content-Type</header>,
<header>ETag</header>,
<header>Expires</header>,
<header>Last-Modified</header>,
<header>Location</header>,
<header>Retry-After</header>
игнорируются.
Все другие дубликаты значений поля заголовка ответа
соединяются при помощи запятой (“<literal>,</literal>”).
Значения поля в заголовке ответа <header>Set-Cookie</header>
всегда возвращаются в виде массива.
</para>
</tag-desc>

<tag-name><literal>r.httpVersion</literal></tag-name>
<tag-desc>
версия HTTP, только чтение
</tag-desc>

<tag-name><literal>r.log(<value>строка</value>)</literal></tag-name>
<tag-desc>
записывает <literal>строку</literal> в лог-файл ошибок
на уровне лога <literal>info</literal>
</tag-desc>

<tag-name id="r_internal_redirect"><literal>r.internalRedirect(<value>uri</value>)</literal></tag-name>
<tag-desc>
осуществляет внутреннее перенаправление на указанный <literal>uri</literal>.
Если uri начинается с префикса “<literal>@</literal>”,
то он считается именованным location.
Перенаправление осуществляется после завершения выполнения обработчика.
</tag-desc>

<tag-name><literal>r.method</literal></tag-name>
<tag-desc>
HTTP метод, только чтение
</tag-desc>

<tag-name><literal>r.parent</literal></tag-name>
<tag-desc>
ссылается на родительский объект запроса
</tag-desc>

<tag-name><literal>r.remoteAddress</literal></tag-name>
<tag-desc>
адрес клиента, только чтение
</tag-desc>

<tag-name id="r_request_body"><literal>r.requestBody</literal></tag-name>
<tag-desc>
возвращает тело запроса клиента, если оно не было
записано во временный файл.
Чтобы убедиться, что тело запроса клиента находится в памяти,
его размер должен быть ограничен
<link doc="../http/ngx_http_core_module.xml" id="client_max_body_size"/>,
и также необходимо установить достаточный размер буфера при помощи
<link doc="../http/ngx_http_core_module.xml" id="client_body_buffer_size"/>.
Свойство доступно только в директиве
<link doc="../http/ngx_http_js_module.xml" id="js_content"/>.
</tag-desc>

<tag-name id="r_response_body"><literal>r.responseBody</literal></tag-name>
<tag-desc>
хранит тело ответа <link id="subrequest">подзапроса</link>, только чтение.
Размер <literal>r.responseBody</literal> ограничивается директивой
<link doc="../http/ngx_http_core_module.xml" id="subrequest_output_buffer_size"/>.
</tag-desc>

<tag-name><literal>r.return(код[, строка])</literal></tag-name>
<tag-desc>
отправляет
клиенту полный ответ с указанным <literal>кодом</literal>
<para>
Можно задать или URL перенаправления
(для кодов 301, 302, 303, 307 и 308),
или текст тела ответа (для остальных кодов) в качестве второго аргумента
</para>
</tag-desc>

<tag-name><literal>r.send(<value>строка</value>)</literal></tag-name>
<tag-desc>
отправляет часть тела ответа клиенту
</tag-desc>

<tag-name><literal>r.sendHeader()</literal></tag-name>
<tag-desc>
отправляет заголовки HTTP клиенту
</tag-desc>

<tag-name><literal>r.status</literal></tag-name>
<tag-desc>
статус, доступно для записи
</tag-desc>

<tag-name id="r_variables"><literal>r.variables{}</literal></tag-name>
<tag-desc>
объект переменных nginx, доступно для записи
(начиная с версии <link doc="changes.xml" id="njs0.2.8">0.2.8</link>)
</tag-desc>

<tag-name><literal>r.warn(<value>строка</value>)</literal></tag-name>
<tag-desc>
записывает <literal>строку</literal> в лог-файл ошибок
на уровне лога <literal>warning</literal>
</tag-desc>

<tag-name id="r_uri"><literal>r.uri</literal></tag-name>
<tag-desc>
текущий <link doc="../http/ngx_http_core_module.xml" id="var_uri">URI</link>
запроса в
<link doc="../http/ngx_http_core_module.xml" id="location">нормализованном</link>
виде, только чтение
</tag-desc>

<tag-name id="subrequest"><literal>r.subrequest(<value>uri</value>[,
<value>options</value>[, <value>callback</value>]])</literal></tag-name>
<tag-desc>
создаёт подзапрос с заданными <literal>uri</literal> и
<literal>options</literal> и устанавливает
необязательный <literal>callback</literal> завершения.

<para>
<link doc="../dev/development_guide.xml.xml" id="http_subrequests">Подзапрос</link>
использует входящиe заголовки клиентского запроса.
Для отправки на проксируемый сервер заголовков, отличных от оригинальных,
может использоваться директива
<link doc="../http/ngx_http_proxy_module.xml" id="proxy_set_header"/>.
Для отправки на проксируемый сервер нового набора заголовков
может использоваться директива
<link doc="../http/ngx_http_proxy_module.xml" id="proxy_pass_request_headers"/>.
</para>

<para>
Если <literal>options</literal> является строкой, то в ней
содержится срока аргументов подзапроса.
В противном случае ожидается, что <literal>options</literal> является
объектом со следующими ключами:
<list type="tag">
<tag-name><literal>args</literal></tag-name>
<tag-desc>
строка с аргументами, по умолчанию используется пустая строка
</tag-desc>
<tag-name><literal>body</literal></tag-name>
<tag-desc>
тело запроса,
по умолчанию используется тело запроса родительского объекта запроса
</tag-desc>

<tag-name><literal>method</literal></tag-name>
<tag-desc>
метод HTTP, по умолчанию используется метод <literal>GET</literal>
</tag-desc>

</list>
</para>

<para>
<literal>callback</literal> получает
объект ответа подзапроса с методами и свойствами,
идентичными родительскому объекту запроса.
</para>

<para>
Начиная с версии njs <link doc="changes.xml" id="njs0.3.8">0.3.8</link>
если не указан <literal>callback</literal>,
то возвращается объект <literal>Promise</literal>,
который разрешается в объект ответа подзапроса.
</para>
</tag-desc>

</list>
</para>

</section>


<section id="stream" name="Stream-сессия">

<para>
Объект stream-сессии доступен только в
модуле
<link doc="../stream/ngx_stream_js_module.xml">ngx_stream_js_module</link>.
Все строки в объекте <literal>stream</literal> являются
<link id="string">байтовыми строками</link>.
</para>

<para>
<list type="tag">

<tag-name id="s_allow"><literal>s.allow()</literal></tag-name>
<tag-desc>
успешно финализирует обработчик фазы
(<link doc="changes.xml" id="njs0.2.4">0.2.4</link>)
</tag-desc>

<tag-name id="s_decline"><literal>s.decline()</literal></tag-name>
<tag-desc>
финализирует обработчик фазы и передаёт контроль следующему обработчику
(<link doc="changes.xml" id="njs0.2.4">0.2.4</link>)
</tag-desc>

<tag-name id="s_deny"><literal>s.deny()</literal></tag-name>
<tag-desc>
финализирует обработчик фазы с кодом ошибки доступа
(<link doc="changes.xml" id="njs0.2.4">0.2.4</link>)
</tag-desc>

<tag-name id="s_done"><literal>s.done</literal>(<value>[код]</value>)</tag-name>
<tag-desc>
успешно финализирует текущий обработчик фазы
или финализирует его с указанным числовым кодом
(<link doc="changes.xml" id="njs0.2.4">0.2.4</link>).
</tag-desc>

<tag-name><literal>s.error(<value>строка</value>)</literal></tag-name>
<tag-desc>
записывает отправленную <literal>строку</literal> в лог-файл ошибок
на уровне лога <literal>error</literal>
</tag-desc>

<tag-name><literal>s.log(<value>строка</value>)</literal></tag-name>
<tag-desc>
записывает отправленную <value>строку</value> в лог-файл ошибок
на уровне лога <literal>info</literal>
</tag-desc>

<tag-name id="s_off"><literal>s.off(<value>имяСобытия</value>)</literal></tag-name>
<tag-desc>
отменяет регистрацию callback'а, установленного методом
<link id="s_on">s.on()</link>
(<link doc="changes.xml" id="njs0.2.4">0.2.4</link>)
</tag-desc>

<tag-name id="s_on"><literal>s.on(<value>событие</value>,
<value>callback</value>)</literal></tag-name>
<tag-desc>
регистрирует <literal>callback</literal> для указанного <literal>события</literal>
(<link doc="changes.xml" id="njs0.2.4">0.2.4</link>).

<para>
<literal>Событием</literal> может являться одна из следующих строк:
<list type="tag">
<tag-name><literal>upload</literal></tag-name>
<tag-desc>
новые данные от клиента
</tag-desc>

<tag-name><literal>download</literal></tag-name>
<tag-desc>
новые данные к клиенту
</tag-desc>

</list>
</para>

<para>
Callback завершения имеет следующий прототип:
<literal>callback(данные, флаги)</literal>, где
<literal>данные</literal> являются строкой,
<literal>флаги</literal> являются объектом
со следующими свойствами:
<list type="tag">
<tag-name id="s_on_callback_last"><literal>last</literal></tag-name>
<tag-desc>
логическое свойство,
true, если данные являются последним буфером.
</tag-desc>

</list>
</para>
</tag-desc>

<tag-name><literal>s.remoteAddress</literal></tag-name>
<tag-desc>
адрес клиента, только чтение
</tag-desc>

<tag-name id="s_send"><literal>s.send(<value>данные</value>[,
<value>параметры</value>])</literal></tag-name>
<tag-desc>
отправляет данные клиенту
(<link doc="changes.xml" id="njs0.2.4">0.2.4</link>).
<literal>Параметры</literal> являются объектом, используемым
для переопределения флагов буфера nginx,
полученных из буфера входных данных.
Флаги могут быть переопределены при помощи следующих флагов:
<para>
<list type="tag">

<tag-name><literal>last</literal></tag-name>
<tag-desc>
логическое свойство,
true, если буфер является последним буфером
</tag-desc>

<tag-name><literal>flush</literal></tag-name>
<tag-desc>
логическое свойство,
true, если буфер должен иметь флаг <literal>flush</literal>
</tag-desc>
</list>
</para>
Метод может быть вызван несколько раз в течение одного вызова callback'a.
</tag-desc>

<tag-name id="s_variables"><literal>s.variables{}</literal></tag-name>
<tag-desc>
объект переменных nginx, доступно для записи
(начиная с версии <link doc="changes.xml" id="njs0.2.8">0.2.8</link>)
</tag-desc>

<tag-name><literal>s.warn(<value>строка</value>)</literal></tag-name>
<tag-desc>
записывает отправленную <literal>строку</literal> в лог-файл ошибок
на уровне лога <literal>warning</literal>
</tag-desc>

</list>
</para>

</section>

</section>


<section id="core" name="Core">


<section id="core_global" name="Global">


<section id="process" name="Process">

<para>
Объект <literal>process</literal> является глобальным объектом,
предоставляющим информацию о текущем процессе
(<link doc="changes.xml" id="njs0.3.3">0.3.3</link>).
</para>


<para>
<list type="tag">

<tag-name id="process_argv"><literal>process.argv</literal></tag-name>
<tag-desc>
Возвращает массив, содержащий аргументы командной строки,
передаваемые в момент запуска текущего процесса.
</tag-desc>

<tag-name id="process_env"><literal>process.env</literal></tag-name>
<tag-desc>
Возвращает объект, содержащий переменные окружения пользователя.
<note>
По умолчанию nginx удаляет все переменные окружения, унаследованные
от своего родительского процесса, кроме переменной TZ.
Для сохранения части унаследованных переменных
необходимо использовать директиву <link doc="../ngx_core_module.xml" id="env"/>.
</note>
</tag-desc>

<tag-name id="process_pid"><literal>process.pid</literal></tag-name>
<tag-desc>
Возвращает PID текущего процесса.
</tag-desc>

<tag-name id="process_ppid"><literal>process.ppid</literal></tag-name>
<tag-desc>
Возвращает PID текущего родительского процесса.
</tag-desc>

</list>
</para>

</section>

</section>


<section id="string" name="Строка">

<para>
В njs существует два типа строк: строка Unicode (по умолчанию) и
байтовая строка.
</para>

<para>
Строка Unicode соответствует строке ECMAScript,
содержащей символы Unicode.
</para>

<para>
Байтовые строки содержат последовательность байт и
используются для сериализации строк Unicode
во внешние данные и десериализации из внешних источников.
Например метод <link id="string_toutf8">toUTF8()</link> сериализует
строку Unicode в байтовую строку используя кодировку UTF8:
<example>
>> '£'.toUTF8().toString('hex')
'c2a3'  /* C2 A3 является UTF8-представлением codepoint 00A3 ('£') */
</example>
Метод <link id="string_tobytes">toBytes()</link> сериализует
строку Unicode с codepoints до 255 в байтовую строку,
в противном случае возвращается <literal>null</literal>:
<example>
>> '£'.toBytes().toString('hex')
'a3'  /* a3 является байтом, равным codepoint 00A3 ('£')  */
</example>
В различные кодировки могут быть преобразованы только байтовые строки.
Например строка не может быть кодирована напрямую в <literal>hex</literal>:
<example>
>> 'αβγδ'.toString('base64')
TypeError: argument must be a byte string
    at String.prototype.toString (native)
    at main (native)
</example>
Чтобы преобразовать строку Unicode в hex,
сначала необходимо её преобразовать в байтовую строку и затем в hex:
<example>
>> 'αβγδ'.toUTF8().toString('base64')
'zrHOss6zzrQ='
</example>

<list type="tag">

<tag-name id="string_bytesfrom"><literal>String.bytesFrom(<value>массив</value>
| <value>строка</value>, <value>кодировка</value>)</literal></tag-name>
<tag-desc>
(только в njs) Создаёт байтовую строку или из массива, содержащего октеты,
или из кодированной строки
(<link doc="changes.xml" id="njs0.2.3">0.2.3</link>).
Кодировкой может быть
<literal>hex</literal>,
<literal>base64</literal> и
<literal>base64url</literal>.
<example>
>> String.bytesFrom([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])
'buffer'

>> String.bytesFrom('YnVmZmVy', 'base64')
'buffer'
</example>
</tag-desc>

<tag-name id="string_fromcharcode"><literal>String.fromCharCode(<value>CharCode1</value>[, ...[,
<value>CharCodeN</value>]])</literal></tag-name>
<tag-desc>
Возвращает строку из одной или более Unicode codepoints.
<example>
>> String.fromCharCode(97, 98, 99, 100)
'abcd'
</example>
</tag-desc>

<tag-name id="string_fromcodepoint"><literal>String.fromCodePoint(<value>codePoint1</value>[, ...[,
<value>codePoint2</value>]])</literal></tag-name>
<tag-desc>
Возвращает строку из одной или более Unicode codepoints.
<example>
>> String.fromCodePoint(97, 98, 99, 100)
'abcd'
</example>
</tag-desc>

<tag-name id="string_charat"><literal>String.prototype.charAt(<value>индекс</value>)</literal></tag-name>
<tag-desc>
Возвращает строку, представляющую одну кодовую единицу Unicode
внутри указанного <literal>индекса</literal>;
пустая строка, если индекс вне диапазона значений.
Индекс может быть числом
между 0 и длиной строки минус 1.
Если индекс не указан, то значение по умолчанию равно <literal>0</literal>,
т.е. возвращается первый символ в строке.
</tag-desc>

<tag-name id="string_codepointat"><literal>String.prototype.CodePointAt(<value>позиция</value>)</literal></tag-name>
<tag-desc>
Возвращает число, представляющее codepoint-значение символа
в пределах указанной <literal>позиции</literal>;
<literal>undefined</literal>, если элемент в позиции отсутствует.
<example>
>> 'ABCD'.codePointAt(3);
68
</example>
</tag-desc>

<tag-name id="string_concat"><literal>String.prototype.concat(<value>строка1</value>[, ...,
<value>строкаN</value>])</literal></tag-name>
<tag-desc>
Возвращает строку, содержающую результат объединения указанных
<literal>строк</literal>.
<example>
>> "a".concat("b", "c")
'abc'
</example>
</tag-desc>

<tag-name id="string_endswith"><literal>String.prototype.endsWith(<value>ПоисковаяСтрока</value>[,
<value>длина</value>])</literal></tag-name>
<tag-desc>
Возвращает <literal>true</literal>, если строка заканчивается символами
указанной строки, иначе <literal>false</literal>.
Необязательный параметр <literal>длина</literal> задаёт длину строки.
Если <value>ПоисковаяСтрока</value> не указана,
значением по умолчанию является длина строки.
<example>
>> 'abc'.endsWith('abc')
true
>> 'abca'.endsWith('abc')
false
</example>
</tag-desc>

<tag-name id="string_frombytes"><literal>String.prototype.fromBytes(<value>начало</value>[,
<value>конец</value>])</literal></tag-name>
<tag-desc>
(только в njs) Возвращает новую строку Unicode из байтовой строки,
в которой каждый байт заменяется соответствующей Unicode codepoint.
</tag-desc>

<tag-name id="string_fromutf8"><literal>String.prototype.fromUTF8(<value>начало</value>[,
<value>конец</value>])</literal></tag-name>
<tag-desc>
(только в njs) Преобразует байтовую строку, содержащую валидную строку UTF8,
в строку Unicode,
иначе возвращается <literal>null</literal>.
</tag-desc>

<tag-name id="string_includes"><literal>String.prototype.includes(<value>поисковаяСтрока</value>[,
<value>позиция</value>]))</literal></tag-name>
<tag-desc>
Возвращает <literal>true</literal>, если строка ищется внутри другой строки,
иначе <literal>false</literal>.
Необязательный параметр <literal>позиция</literal> задаёт позицию
внутри строки, от которой начинается поиск для <literal>поисковойСтроки</literal>. 
Значение по умолчанию равно 0.
<example>
>> 'abc'.includes('bc')
true
</example>
</tag-desc>

<tag-name id="string_indexof"><literal>String.prototype.indexOf(<value>поисковаяСтрока</value>[,
<value>fromIndex</value>])</literal></tag-name>
<tag-desc>
Возвращает позицию первого появления
<literal>поисковойСтроки</literal>.
Поиск начинается с <literal>fromIndex</literal>.
Возвращает <value>-1</value>, если значение не найдено.
<literal>fromIndex</literal> является числом,
значение по умолчанию равно 0.
Если <literal>fromIndex</literal> меньше, чем 0
или больше, чем
<link id="string_length">String.prototype.length</link><value></value>,
поиск начнётся на индексе <value>0</value> и
<value>String.prototype.length</value>.
<example>
>> 'abcdef'.indexOf('de', 2)
3
</example>
</tag-desc>

<tag-name id="string_lastindexof"><literal>String.prototype.lastIndexOf(<value>поисковаяСтрока</value>[,
<value>fromIndex</value>])</literal></tag-name>
<tag-desc>
Возвращает позицию последнего появления
of the <literal>поисковойСтроки</literal>,
поиск осуществляется в обратном порядке от <literal>fromIndex</literal>.
Возвращает <value>-1</value>, если значение не найдено.
Если значение <literal>поисковойСтроки</literal> пустое,
то возвращается <literal>fromIndex</literal>.
<example>
>> "nginx".lastIndexOf("gi")
1
</example>
</tag-desc>

<tag-name id="string_length"><literal>String.prototype.length</literal></tag-name>
<tag-desc>
Возвращает длину строки.
<example>
>> 'αβγδ'.length
4
</example>
</tag-desc>

<tag-name id="string_match"><literal>String.prototype.match([<value>регулярноеВыражение</value>])</literal></tag-name>
<tag-desc>
Возвращает совпадение при сопоставлении строки с
регулярным выражением.
<example>
>> 'nginx'.match( /ng/i )
'ng'
</example>
</tag-desc>

<tag-name id="string_padend"><literal>String.prototype.padEnd(<value>длина</value>
[, <value>строка</value>])</literal></tag-name>
<tag-desc>
Возвращает строку указанной длины,
добавляя строку в конец указанной
строки (<link doc="changes.xml" id="njs0.2.3">0.2.3</link>).
<example>
>> '1234'.padEnd(8, 'abcd')
'1234abcd'
</example>
</tag-desc>

<tag-name id="string_padstart"><literal>String.prototype.padStart(<value>длина</value>
[, <value>строка</value>])</literal></tag-name>
<tag-desc>
Возвращает строку указанной длины,
добавляя строку к началу указанной
строки (<link doc="changes.xml" id="njs0.2.3">0.2.3</link>).
<example>
>> '1234'.padStart(8, 'abcd')
'abcd1234'
</example>
</tag-desc>

<tag-name id="string_repeat"><literal>String.prototype.repeat(<value>число</value>)</literal></tag-name>
<tag-desc>
Возвращает строку
с указанным числом копий строки.
<example>
>> 'abc'.repeat(3)
'abcabcabc'
</example>
</tag-desc>

<tag-name id="string_replace"><literal>String.prototype.replace([<value>регулярноеВыражение</value>|<value>string</value>[,
<value>string</value>|<value>function</value>]])</literal></tag-name>
<tag-desc>
Возвращает новую строку, которая сопоставляется со
строкой или регулярным выражением,
и заменяется на <literal>строку</literal> или <literal>функцию</literal>.
<example>
>> 'abcdefgh'.replace('d', 1)
'abc1efgh'
</example>
</tag-desc>

<tag-name id="string_search"><literal>String.prototype.search([<value>регулярноеВыражение</value>])</literal></tag-name>
<tag-desc>
Осуществляет поиск строки при помощи регулярного выражения.
<example>
>> 'abcdefgh'.search('def')
3
</example>
</tag-desc>

<tag-name id="string_slice"><literal>String.prototype.slice(<value>начало</value>[,
<value>конец</value>])</literal></tag-name>
<tag-desc>
Возвращает новую строку, содержащую часть
исходной строки между <literal>началом</literal>
и <literal>концом</literal> или
от <literal>начала</literal> до конца строки.
<example>
>> 'abcdefghijklmno'.slice(NaN, 5)
'abcde'
</example>
</tag-desc>

<tag-name id="string_split"><literal>String.prototype.split(([<value>строка</value>|<value>регулярноеВыражение</value>[,
<value>лимит</value>]]))</literal></tag-name>
<tag-desc>
Возвращает совпадение строки регулярному выражению.
Необязательный параметр <literal>лимит</literal> является числом, задающим
ограничение на количество найденных подстрок.
<example>
>> 'abc'.split('')
[
 'a',
 'b',
 'c'
]
</example>
</tag-desc>

<tag-name id="string_startswith"><literal>String.prototype.startsWith(<value>поисковаяСтрока</value>[,
<value>позиция</value>])</literal></tag-name>
<tag-desc>
Возвращает <literal>true</literal>, если строка начинается с символов
указанной строки, иначе <literal>false</literal>.
Необязательный параметр <literal>позиция</literal> является местом
в этой строке, с которого начинается поиск <literal>поисковойСтоки</literal>.
Значение по умолчанию равно 0.
<example>
>> 'abc'.startsWith('abc')
true
> 'aabc'.startsWith('abc')
false
</example>
</tag-desc>

<tag-name id="string_substr"><literal>String.prototype.substr(<value>начало</value>[,
<value>длина</value>])</literal></tag-name>
<tag-desc>
Возвращает часть строки указанной <literal>длины</literal>
от <literal>начала</literal>
или от <literal>начала</literal> до конца строки.
<example>
>>  'abcdefghijklmno'.substr(3, 5)
'defgh'
</example>
</tag-desc>

<tag-name id="string_substring"><literal>String.prototype.substring(<value>начало</value>[,
<value>конец</value>])</literal></tag-name>
<tag-desc>
Возвращает часть строки между
<literal>началом</literal> и <literal>концом</literal> или
от от <literal>начала</literal> до конца строки.
<example>
>> 'abcdefghijklmno'.substring(3, 5)
'de'
</example>
</tag-desc>

<tag-name id="string_tobytes"><literal>String.prototype.toBytes(начало[,
конец])</literal></tag-name>
<tag-desc>
(только в njs) Сериализует строку Unicode в байтовую строку.
Возвращает <literal>null</literal>, если в строке найден символ больше, чем 255.
</tag-desc>

<tag-name id="string_tolowercase"><literal>String.prototype.toLowerCase()</literal></tag-name>
<tag-desc>
Преобразует строку в нижний регистр.
Метод поддерживает только простое свёртывание Unicode.
<example>
>> 'ΑΒΓΔ'.toLowerCase()
'αβγδ'
</example>
</tag-desc>

<tag-name><literal>String.prototype.toString([<value>кодировка</value>])</literal></tag-name>
<tag-desc>
<para>
Если кодировка не указана,
возвращает указанную строку Unicode string или байтовую строку как в ECMAScript.
</para>

<para>
(только в njs) Если кодировка указана,
кодирует <link id="string_tobytes">байтовую строку</link> в
<literal>hex</literal>,
<literal>base64</literal> или
<literal>base64url</literal>.
</para>
<example>
>>  'αβγδ'.toUTF8().toString('base64url')
'zrHOss6zzrQ'
</example>
</tag-desc>

<tag-name id="string_touppercase"><literal>String.prototype.toUpperCase()</literal></tag-name>
<tag-desc>
Преобразует строку в верхний регистр.
Метод поддерживает только простое свёртывание Unicode.
<example>
>> 'αβγδ'.toUpperCase()
'ΑΒΓΔ'
</example>
</tag-desc>

<tag-name id="string_toutf8"><literal>String.prototype.toUTF8(<value>начало</value>[,
<value>конец</value>])</literal></tag-name>
<tag-desc>
(только в njs) Сериализует строку Unicode
в байтовую строку при помощи кодирования UTF8.
<example>
>> 'αβγδ'.toUTF8().length
8
>> 'αβγδ'.length
4
</example>
</tag-desc>

<tag-name id="string_trim"><literal>String.prototype.trim()</literal></tag-name>
<tag-desc>
Удаляет пробелы в начале и конце строки.
<example>
>> '   abc  '.trim()
'abc'
</example>
</tag-desc>

<tag-name id="string_trimend"><literal>String.prototype.trimEnd()</literal></tag-name>
<tag-desc>
Удаляет пробелы в конце строки.
(<link doc="changes.xml" id="njs0.3.4">0.3.4</link>).
<example>
>> '   abc  '.trimEnd()
'   abc'
</example>
</tag-desc>

<tag-name id="string_trimstart"><literal>String.prototype.trimStart()</literal></tag-name>
<tag-desc>
Удаляет пробелы в начале строки.
(<link doc="changes.xml" id="njs0.3.4">0.3.4</link>).
<example>
>> '   abc  '.trimStart()
'abc  '
</example>
</tag-desc>

<tag-name id="encodeuri"><literal>encodeURI(<value>URI</value>)</literal></tag-name>
<tag-desc>
Кодирует URI путём замены определённых символов
на одну, две, три или четыре последовательности,
представляющие UTF-8 кодировку символа.
<example>
>> encodeURI('012αβγδ')
'012%CE%B1%CE%B2%CE%B3%CE%B4'
</example>
</tag-desc>

<tag-name id="encodeuricomponent"><literal>encodeURIComponent(<value>encodedURIString</value>)</literal></tag-name>
<tag-desc>
Кодирует URI путём замены определённых символов
на одну, две, три или четыре последовательности,
представляющие UTF-8 кодировку символа.
<example>
>> encodeURIComponent('[@?=')
'%5B%40%3F%3D'
</example>
</tag-desc>

<tag-name id="decodeuri"><literal>decodeURI(<value>encodedURI</value>)</literal></tag-name>
<tag-desc>
Декодирует ранее <link id="encodeuri">кодированный</link> URI.
<example>
>> decodeURI('012%CE%B1%CE%B2%CE%B3%CE%B4')
'012αβγδ'
</example>
</tag-desc>

<tag-name id="decodeuricomponent"><literal>decodeURIComponent(<value>decodedURIString</value>)</literal></tag-name>
<tag-desc>
Декодирует ранее <link id="encodeuri">кодированный</link> URI.
<example>
>> decodeURIComponent('%5B%40%3F%3D')
'[@?='
</example>
</tag-desc>

</list>
</para>

</section>

</section>

</article>