Basic Multilingual Plane (BMP) — Базовая многоязычная плоскость. Встречается в подразделе «Pattern Semantics» у раздела «RegExp (Regular Expression) Objects«. В общем нужно знать то, что есть два вида написания шаблона регулярного выражения в JavaScript: BMP pattern Unicode pattern Примечание 2 Например, рассмотрите шаблон, выраженный в исходном тексте как один символ […]
ECMAScript
Большинство операторов и объявлений ECMAScript должны заканчиваться точкой с запятой. Такие точки с запятой всегда могут быть явно указаны в исходном тексте. Однако для удобства такие точки с запятой могут быть опущены в исходном тексте в определенных ситуациях. Эти ситуации описываются тем, что в этих ситуациях точки с запятой автоматически […]
Assertion [U, N] :: Утверждение 1 — ^ Утверждение 2 — $ Утверждение 3 — \b Утверждение 4 — \B Утверждение 5 — ( ? = Disjunction[?U, ?N] ) Утверждение 6 — ( ? ! Disjunction[?U, ?N] ) Утверждение 7 — ( ? <= Disjunction[?U, ?N] ) Утверждение 8 — […]
Introduction - Введение 1 Scope - Сфера 2 Conformance - Соответствие 2.1 Example Clause Heading 3 Normative References - Нормативные ссылки 4 Overview - Обзор 4.1 Web Scripting - Веб-скрипты 4.2 Hosts and Implementations - Хосты и Реализации 4.3 ECMAScript Overview - Обзор ECMAScript 4.3.1 Objects 4.3.2 The Strict Variant […]
Абстрактная операция EnumerateObjectProperties (Перечислить Свойства Объекта) принимает аргумент O (объект Object). При вызове она выполняет следующие шаги: 1. Вернуть объект Iterator (27.1.1.2), метод next которого выполняет итерацию по всем ключам со значением String перечислимых (enumerable) свойств O. Объект итератора никогда не доступен напрямую для кода ECMAScript. Механика и порядок перечисления […]
Запись Частной Среды (PrivateEnvironment Record) — это механизм спецификации, используемый для отслеживания Частных Имен на основе лексической вложенной структуры ClassDeclaration‘ов и ClassExpression‘ов в коде ECMAScript. Они похожи на Environment Records, но отличаются от них. Каждая Запись Частной Среды связана с ClassDeclaration или ClassExpression. Каждый раз, когда оценивается такой класс, создаётся […]
Контекст выполнения (execution context) — это устройство спецификации, которое используется для отслеживания оценки кода во время выполнения реализацией ECMAScript. В любой момент времени существует не более одного контекста выполнения для каждого агента, который фактически выполняет код. Это называется текущим контекстом выполнения (running execution context) агента. Все ссылки на текущий контекст […]
Алгоритмы в этой спецификации управляют значениями, каждое из которых имеет связанный тип. Возможные типы значений в точности те, что определены в этом разделе. Типы далее подразделяются на типы языка ECMAScript и типы спецификаций. В этой спецификации обозначение "Type(x)" используется как сокращение для “the type of x”, где “type” относится к […]
Эти операции используются во многих местах спецификации. Оглавление 8.5.1 RS: InstantiateFunctionObject 8.5.2 RS: BindingInitialization 8.5.3 RS: IteratorBindingInitialization 8.5.4 SS: AssignmentTargetType 8.5.5 SS: PropName 8.5.1 Семантика времени выполнения: InstantiateFunctionObject Операция InstantiateFunctionObject (Создание экземпляра функционального объекта), управляемая синтаксисом, принимает аргументы scope и privateScope. Она определяется кусочно по следующим производствам: FunctionDeclaration :function BindingIdentifier ( FormalParameters ) { FunctionBody }function ( FormalParameters ) { FunctionBody } 1. […]
8.4.1 SS: Contains 8.4.2 SS: ComputedPropertyContains 8.4.1 Статическая семантика: Contains Синтаксически управляемая операция Contains (Содержит) принимает аргумент symbol. Каждая альтернатива грамматики в этой спецификации, которая не указана ниже, неявно имеет следующее определение по умолчанию Contains: 1. Для каждого дочернего узла этого узла синтаксического анализа выполните а. Если дочерний элемент […]
Оглавление 8.3.1 SS: HasName 8.3.2 SS: IsFunctionDefinition 8.3.3 SS: IsAnonymousFunctionDefinition ( expr ) 8.3.4 SS: IsIdentifierRef 8.3.5 RS: NamedEvaluation 8.3.1 Статическая семантика: HasName Операция HasName (Имеет Имя?), управляемая синтаксисом, не принимает аргументов. Она определяется кусочно по следующим производствами: PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList 1. Пусть expr будет ParenthesizedExpression, которое покрывается CoverParenthesizedExpressionAndArrowParameterList. 2. Если […]
8.2.1 SS: ContainsDuplicateLabels 8.2.2 SS: ContainsUndefinedBreakTarget 8.2.3 SS: ContainsUndefinedContinueTarget 8.2.1 Статическая семантика: ContainsDuplicateLabels (Содержит повторяющиеся ярлыки) Операция ContainsDuplicateLabels (Содержит повторяющиеся ярлыки), управляемая синтаксисом, принимает аргумент labelSet. Она определяется кусочно по следующим производствам: Statement : VariableStatement EmptyStatement ExpressionStatement ContinueStatement BreakStatement ReturnStatement ThrowStatement DebuggerStatement Block : { } StatementListItem : Declaration 1. Вернуть false. StatementList : StatementList StatementListItem 1. Пусть […]
Примечание 1 В этот раздел внесены поправки в B.1.2.4. Шаблон регулярного выражения преобразуется в Абстрактное Замыкание с помощью процесса, описанного ниже. При реализации рекомендуется использовать более эффективные алгоритмы, чем перечисленные ниже, если результаты остаются одинаковыми. Абстрактное Замыкание используется как значение внутреннего слота [[RegExpMatcher]] объекта RegExp. Шаблон (Pattern) — это […]
Конструктор RegExp применяет следующую грамматику к входному шаблону строки String. Ошибка возникает, если грамматика не может интерпретировать строку String как расширение Pattern. Синтаксис (Syntax) Pattern [U, N] :: Disjunction [?U, ?N] Disjunction [U, N] :: Alternative [?U, ?N] Alternative [?U, ?N] | Disjunction [?U, ?N] Alternative [U, N] :: [empty] Alternative [?U, ?N] Term [?U, […]
8.1.1 SS: BoundNames 8.1.2 SS: DeclarationPart 8.1.3 SS: IsConstantDeclaration 8.1.4 SS: LexicallyDeclaredNames 8.1.5 SS: LexicallyScopedDeclarations 8.1.6 SS: VarDeclaredNames 8.1.7 SS: VarScopedDeclarations 8.1.8 SS: TopLevelLexicallyDeclaredNames 8.1.9 SS: TopLevelLexicallyScopedDeclarations 8.1.10 SS: TopLevelVarDeclaredNames 8.1.11 SS: TopLevelVarScopedDeclarations 8.1.1 Статическая семантика: BoundNames (Связанные имена) Примечание "*default*" используется в этой спецификации как синтетическое имя […]
Объект Atomics: является %Atomics%. является начальным значением свойства «Atomics» глобального объекта. это обычный объект. имеет внутренний слот [[Prototype]], значение которого равно %Object.prototype%. не имеет внутреннего метода [[Construct]]; его нельзя использовать в качестве конструктора с оператором new. не имеет внутреннего метода [[Call]]; его нельзя вызвать как функцию. Объект Atomics предоставляет […]
Перед чтением какого-либо файла из директории на сервере при помощи NodeJS мы хотим предварительно проверять его существование. Мы хотим получать ИСТИНУ (true) если файл присутствует на сервере или ЛОЖЬ (false) если файла нет. Зачем нужно проверять существование файла на сервере? Если файл не будет существовать на сервере, то это […]
Объект JSON: является %JSON%. является начальным значением свойства «JSON» для глобального объекта. это обычный объект. содержит две функции, parse и stringify, которые используются для анализа и построения текстов JSON. имеет внутренний слот [[Prototype]], значение которого равно %Object.prototype%. не имеет внутреннего метода [[Construct]]; его нельзя использовать в качестве конструктора с оператором […]
Слабые Наборы (WeakSets) — это коллекции объектов. Отдельный объект может встречаться только один раз как элемент коллекции Слабого Набора (WeakSet). Можно запросить Слабый Набор (WeakSet), чтобы узнать, содержит ли он конкретный объект, но механизма для перечисления содержащихся в нем объектов не предусмотрено. В определенных условиях неактивные объекты удаляются как […]
Слабые Карты (WeakMaps) — это коллекции пар ключ/значение, где ключи являются объектами, а значения могут быть произвольными значениями языка ECMAScript. Слабая Карта (WeakMap) может быть запрошена, чтобы увидеть, содержит ли она пару ключ/значение с определенным ключом, но не предусмотрен механизм для перечисления объектов, которые он содержит в качестве ключей. В […]
Карты (Map) — это наборы пар ключ/значение, где как ключи, так и значения могут быть произвольными значениями языка ECMAScript. Отдельное значение ключа может встречаться только в одной паре ключ/значение в коллекции Карты (Map). Различные ключевые значения различаются с помощью алгоритма сравнения SameValueZero. Карты должны быть реализованы с использованием либо хэш-таблиц, […]
Подразделы 8.1 Scope Analysis — Анализ Области Видимости 8.2 Labels — Ярлыки 8.3 Function Name Inference — Вывод имени функции 8.4 Contains — Содержания 8.5 Miscellaneous — Смешанные Информационные ссылки Стандарт ECMAScript — Раздел «8 Syntax-Directed Operations» — https://tc39.es/ecma262/#sec-syntax-directed-operations
Вступление В IT-мире очень много сущностей, которые называется словом класс. Практически во всех языках программирования можно встретить слово класс, имеющих порой разные смыслы. О каком классе символа идёт речь в этой публикации? Здесь мы будем говорить классе символа, который является частью производства Атом — частью синтаксиса шаблона регулярного выражения. […]
Обещание (Promise) — это объект, который используется в качестве заполнителя для возможных результатов отложенного (и, возможно, асинхронного) вычисления. Обещание (Promise) принадлежит к разделу «Управляемые Объекты Абстракции» (Control Abstraction Objects) Состояния объектов Promise Любой объект Promise находится в одном из трех взаимоисключающих состояний: fulfilled — (выполнено) rejected — (отклонено) […]
В дополнение к тем, которые определены в этом разделе, в этой спецификации определены специализированные операции, управляемые синтаксисом. 8.1 Scope Analysis — 8.2 Labels — 8.3 Function Name Inference — 8.4 Contains — 8.5 Miscellaneous — Информационные ссылки Стандарт ECMAScript — Раздел «8 Syntax-Directed Operations» — https://tc39.es/ecma262/#sec-syntax-directed-operations
Эти операции не являются частью языка ECMAScript; они определены здесь исключительно для помощи в спецификации семантики языка ECMAScript. В этой спецификации определены другие, более специализированные абстрактные операции. 7.1 Type Conversion — 7.2 Testing and Comparison Operations — 7.3 Operations on Objects — 7.4 Operations on Iterator Objects — Информационные […]
Объект (Object) логически представляет собой набор свойств. Каждое свойство является либо «свойством данных» (data property), либо «свойством доступа» (accessor property): Свойство данных (data property) связывает значение ключа со значением языка ECMAScript и набором логических атрибутов Boolean. Свойство доступа (accessor property) связывает значение ключа с одной или двумя функциями средства […]
Тип BigInt представляет собой целочисленное значение. Значение может быть любого размера и не ограничено конкретной разрядностью. Обычно, если не указано иное, операции предназначены для получения точных математически обоснованных ответов. Для двоичных операций BigInts действуют как два дополнительных двоичных строки, с отрицательными числами, которые рассматриваются как имеющие биты, установленные бесконечно влево. […]
Тип Number имеет ровно 18,437,736,874,454,810,627 (то есть 264 — 253 + 3) значений, представляющих значения IEEE 754-2019 в 64-битном формате двойной точности, как указано в стандарте IEEE для двоичной арифметики с плавающей запятой, за исключением того, что 9,007,199,254,740,990 (то есть 253 — 2) отдельные значения «не числа (Not-a-Number)» стандарта IEEE […]
ECMAScript имеет два встроенных числовых типа: тип Number и тип BigInt. В этой спецификации каждый числовой тип T содержит мультипликативное значение идентичности, обозначенное T::unit. Типы спецификации также имеют следующие абстрактные операции, также обозначаемые T::op для данной операции с именем спецификации op. Все типы аргументов являются T. В столбце «Результат» отображается […]
Тип Symbol (Знак) — это набор всех значений, отличных от String, которые могут использоваться в качестве ключа свойства Объекта (6.1.7). Каждое возможное значение Symbol уникально и неизменяемо. Каждое значение Symbol неизменно содержит связанное значение с именем [[Description]], которое либо undefined, либо является значением String. 6.1.5.1 Хорошо известные Знаки Общеизвестные […]
Тип String (Строка) — это набор всех упорядоченных последовательностей из нуля или более 16-битных целых чисел без знака («элементов») до максимальной длины 253 — 1 элемента. Тип String обычно используется для представления текстовых данных в запущенной программе ECMAScript, и в этом случае каждый элемент в строке обрабатывается как значение кодовой […]
Тип Boolean представляет собой логическую сущность, имеющую два значения: истина (true) и ложь (false). Информационные ссылки Стандарт ECMAScript — Раздел «6.1.3 The Boolean Type» — https://tc39.es/ecma262/#sec-ecmascript-language-types-boolean-type
Тип Null имеет ровно одно значение, называемое null. Информационные ссылки Стандарт ECMAScript — Раздел «6.1.2 The Null Type» — https://tc39.es/ecma262/#sec-ecmascript-language-types-null-type
Тип Undefined имеет ровно одно значение, называемое undefined. Любая переменная, которой не было присвоено значение, имеет значение undefined. Информационные ссылки Стандарт ECMAScript — Раздел «6.1.1 The Undefined Type» — https://tc39.es/ecma262/#sec-ecmascript-language-types-undefined-type
Запись Определения Статического Блока Класса (ClassStaticBlockDefinition) — это значение Записи, используемое для инкапсуляции исполняемого кода для блока статической инициализации класса. В записях ClassStaticBlockDefinition есть поля, перечисленные в Таблице 13. Имя поля Значение Смысл [[BodyFunction]] Объект функции Объект функции, вызываемый во время статической инициализации класса. Таблица 13: Поля записи ClassStaticBlockDefinition […]
Тип спецификации Частного Имени (Private Name) используется для описания глобально уникального значения (которое отличается от любого другого Частного Имени, даже если они в остальном неотличимы), которое представляет ключ элемента частного класса (поля, метода или средства доступа). Каждое Частное Имя имеет связанный неизменяемый [[Description]], который является значением String. Частное Имя может […]
Тип Запись Определения Поля Класса (ClassFieldDefinition) — это Запись, используемая в спецификации полей класса. Значения типа ClassFieldDefinition являются значениями Записи, поля которых определены в Таблице 12. Такие значения называются Записями Определения Поля Класса. Имя Поля Значение Смысл [[Name]] Частное Имя, Строковое или Знаковое значение. Название поля. [[Initializer]] объект функции ECMAScript […]
Тип Частный Элемент (PrivateElement) — это Запись, используемая в спецификации полей, методов и средств доступа частного класса. Хотя Дескрипторы Свойств не используются для частных элементов, частные поля ведут себя аналогично ненастраиваемым, неперечисляемым, доступным для записи свойствам данных, частные методы ведут себя аналогично ненастраиваемым, неперечисляемым, неперечисляемым свойствам данных и частным средствам […]
Тип спецификации Блока Данных (Data Block) используется для описания отдельной и изменяемой последовательности числовых значений байтового (8-битного) размера. Байтовое значение (byte value) — это целое число в диапазоне от 0 до 255 включительно. Значение блока данных создается из фиксированного числа байтов, каждый из которых имеет начальное значение 0. Для […]
Тип спецификации Абстрактное Замыкание (Abstract Closure) используется для ссылки на шаги алгоритма вместе с коллекцией значений. Абстрактные замыкания — это мета-значения, которые вызываются с использованием стиля приложения-функции, такого как closure(arg1, arg2). Подобно Абстрактным Операциям, вызовы выполняют шаги алгоритма, описанные Абстрактным Замыканием. На этапах алгоритма, которые создают Абстрактное Замыкание, значения […]
Тип Запись Среды (Environment Record type) используется для объяснения поведения разрешения имен во вложенных функциях и блоках. Этот тип и операции с ним определены в разделе 9.1. Информационные ссылки Стандарт ECMAScript — Раздел «6.2.6 The Environment Record Specification Type» — https://tc39.es/ecma262/#sec-lexical-environment-and-environment-record-specification-types
Тип Дескриптор свойства (Property Descriptor type) используется для объяснения манипуляции и повторения атрибутов свойств Объекта. Значения типа Дескриптора Свойства — это Записи. Имя каждого поля — это имя атрибута, а его значение — соответствующее значение атрибута, как указано в пункте 6.1.7.1. Кроме того, любое поле может присутствовать или отсутствовать. Имя […]
Тип Ссылочная Запись (Reference Record) используется для объяснения поведения таких операторов, как delete, typeof, операторов присваивания, ключевого слова super и других языковых функций. Например, ожидается, что левый операнд присваивания создаст Ссылочную Запись. Ссылочная запись — это разрешенное имя или привязка свойства; его поля определены в Таблице 10. Field Name […]
Тип спецификации соответствует мета-значениям, которые используются в алгоритмах для описания семантики языковых конструкций ECMAScript и типов языка ECMAScript. Типы спецификации включают Ссылку (Reference), Список (List), Завершение (Completion), Дескриптор свойства (Property Descriptor), Запись среды (Environment Record), Абстрактное замыкание (Abstract Closure) и Блок данных (Data Block). Значения типа спецификации — это […]
Тип Завершения (Completion type) — это Запись, используемая для объяснения распространения значений и потока управления во время выполнения, например поведения операторов (break, continue, return и throw), которые выполняют нелокальную передачу управления. Значения типа Завершение (Values of the Completion type) — это значения Записей, поля которых определены в Таблице 9. Такие […]
20.3.1 Конструктор Boolean Конструктор Boolean: это %Boolean%. это начальное значение свойства «Boolean» глобального объекта. создаёт и инициализирует новый Логический объект (Boolean) при вызове в качестве конструктора. выполняет преобразование типа при вызове функции, а не конструктора. может использоваться как значение предложения extends определения класса. Конструкторы подкласса, которые намереваются наследовать указанное Логическое […]
20.4.1 Конструктор Знака (Symbol) Конструктор Знака (Symbol): является %Symbol%. имеет начальное значение свойства «Symbol» глобального объекта. возвращает новое значение Знака при вызове как функции. не предназначен для использования с оператором new. не предназначен для разделения на подклассы. может использоваться как значение предложения extends определения класса, но его вызов super вызовет […]
Множество Тип Множество (Set) используется для объяснения коллекции неупорядоченных элементов для использования в модели памяти. Оно отличается от одноименного типа коллекции ECMAScript. Чтобы устранить неоднозначность, в этой спецификации экземпляры коллекции ECMAScript постоянно упоминаются как «Объекты Наборы» (Set objects). Значения типа Множество представляют собой простые коллекции элементов, в которых ни один […]
Список Тип Список (List) используется для объяснения оценки списков аргументов (раздел 13.3.8) в выражениях new, в вызовах функций и в других алгоритмах, где необходим простой упорядоченный список значений. Значения типа Список (List) — это просто упорядоченные последовательности элементов списка, содержащие отдельные значения. Эти последовательности могут быть любой длины. К элементам […]