Annex B (normative) Web ブラウザー向けの追加 ECMAScript 機能

この附属書で定義される ECMAScript 言語の構文および意味論は、ECMAScript ホストが web ブラウザーである場合に要求される。この附属書の内容は規範的であるが、ECMAScript ホストが web ブラウザーでない場合は任意である。

この附属書で定義される機能の一部はこの附属書で指定され、一部はこの文書の本文で指定される。

機能が本文で指定される場合、それが文書に影響する各箇所は、色付きのボックス内の "Normative Optional" という語で示される。さらに、その機能がアルゴリズムまたは early error 規則内の特定の文言に関わる場合、これは関連する機能を「ホストがサポートする」という条件によって保護される。Web ブラウザーはそのようなすべての機能をサポートすることが要求される。

Note

この附属書は、web ブラウザー ECMAScript ホストの様々なレガシー機能およびその他の特性を記述する。この附属書で指定されるすべての言語機能および振る舞いは、1 つ以上の望ましくない特性を持ち、レガシーな使用がなければこの仕様から削除されるものである。しかし、既存の多数の web ページがこれらの機能を使用しているため、web ブラウザーはそれらを引き続きサポートしなければならない。この附属書の仕様は、これらのレガシー機能の相互運用可能な実装に対する要件を定義する。

これらの機能は、コア ECMAScript 言語の一部とは見なされない。プログラマーは、新しい ECMAScript コードを書くときに、これらの機能および振る舞いを使用したり、それらの存在を仮定したりするべきではない。ECMAScript 実装は、その実装が web ブラウザーの一部であるか、web ブラウザーが遭遇するものと同じレガシー ECMAScript コードを実行する必要がある場合を除き、これらの機能を実装しないことが推奨される。

B.1 追加構文

B.1.1 HTML 風コメント

12.4 の構文および意味論は、次のように拡張される。ただし、この拡張は、ゴール記号 Module を使用してソーステキストを解析するときには許可されない:

構文

InputElementHashbangOrRegExp :: WhiteSpace LineTerminator Comment CommonToken HashbangComment RegularExpressionLiteral HTMLCloseComment Comment :: MultiLineComment SingleLineComment SingleLineHTMLOpenComment SingleLineHTMLCloseComment SingleLineDelimitedComment MultiLineComment :: /* FirstCommentLineopt LineTerminator MultiLineCommentCharsopt */ HTMLCloseCommentopt FirstCommentLine :: SingleLineDelimitedCommentChars SingleLineHTMLOpenComment :: <!-- SingleLineCommentCharsopt SingleLineHTMLCloseComment :: LineTerminatorSequence HTMLCloseComment SingleLineDelimitedComment :: /* SingleLineDelimitedCommentCharsopt */ HTMLCloseComment :: WhiteSpaceSequenceopt SingleLineDelimitedCommentSequenceopt --> SingleLineCommentCharsopt SingleLineDelimitedCommentChars :: SingleLineNotAsteriskChar SingleLineDelimitedCommentCharsopt * SingleLinePostAsteriskCommentCharsopt SingleLineNotAsteriskChar :: SourceCharacter but not one of * or LineTerminator SingleLinePostAsteriskCommentChars :: SingleLineNotForwardSlashOrAsteriskChar SingleLineDelimitedCommentCharsopt * SingleLinePostAsteriskCommentCharsopt SingleLineNotForwardSlashOrAsteriskChar :: SourceCharacter but not one of / or * or LineTerminator WhiteSpaceSequence :: WhiteSpace WhiteSpaceSequenceopt SingleLineDelimitedCommentSequence :: SingleLineDelimitedComment WhiteSpaceSequenceopt SingleLineDelimitedCommentSequenceopt

行終端コードポイントを含む MultiLineComment と同様に、SingleLineHTMLCloseComment は構文文法による解析の目的では LineTerminator と見なされる。

B.1.2 正規表現パターン

22.2.1 の構文は、次のように変更および拡張される。これらの変更は曖昧性を導入するが、それらは文法生成規則の順序および文脈情報によって解消される。次の文法を使用して解析する場合、各選択肢は、それ以前の生成規則の選択肢が一致しない場合にのみ考慮される。

この代替パターン文法および意味論は、BMP パターンの構文および意味論のみを変更する。次の文法拡張には、[UnicodeMode] パラメータでパラメータ化された生成規則が含まれる。しかし、これらの拡張はいずれも、ゴール記号に [UnicodeMode] パラメータが存在する状態で解析するときに認識される Unicode パターンの構文を変更しない。

構文

Term[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: [+UnicodeMode] Assertion[+UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] [+UnicodeMode] Atom[+UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Quantifier [+UnicodeMode] Atom[+UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] [~UnicodeMode] QuantifiableAssertion[?NamedCaptureGroups] Quantifier [~UnicodeMode] Assertion[~UnicodeMode, ~UnicodeSetsMode, ?NamedCaptureGroups] [~UnicodeMode] ExtendedAtom[?NamedCaptureGroups] Quantifier [~UnicodeMode] ExtendedAtom[?NamedCaptureGroups] Assertion[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: ^ $ \b \B [+UnicodeMode] (?= Disjunction[+UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) [+UnicodeMode] (?! Disjunction[+UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) [~UnicodeMode] QuantifiableAssertion[?NamedCaptureGroups] (?<= Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (?<! Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) QuantifiableAssertion[NamedCaptureGroups] :: (?= Disjunction[~UnicodeMode, ~UnicodeSetsMode, ?NamedCaptureGroups] ) (?! Disjunction[~UnicodeMode, ~UnicodeSetsMode, ?NamedCaptureGroups] ) ExtendedAtom[NamedCaptureGroups] :: . \ AtomEscape[~UnicodeMode, ?NamedCaptureGroups] \ [lookahead = c] CharacterClass[~UnicodeMode, ~UnicodeSetsMode] ( GroupSpecifier[~UnicodeMode]opt Disjunction[~UnicodeMode, ~UnicodeSetsMode, ?NamedCaptureGroups] ) (? RegularExpressionModifiers : Disjunction[~UnicodeMode, ~UnicodeSetsMode, ?NamedCaptureGroups] ) (? RegularExpressionModifiers - RegularExpressionModifiers : Disjunction[~UnicodeMode, ~UnicodeSetsMode, ?NamedCaptureGroups] ) InvalidBracedQuantifier ExtendedPatternCharacter InvalidBracedQuantifier :: { DecimalDigits[~Sep] } { DecimalDigits[~Sep] ,} { DecimalDigits[~Sep] , DecimalDigits[~Sep] } ExtendedPatternCharacter :: SourceCharacter but not one of ^ $ \ . * + ? ( ) [ | AtomEscape[UnicodeMode, NamedCaptureGroups] :: [+UnicodeMode] DecimalEscape [~UnicodeMode] DecimalEscape but only if the CapturingGroupNumber of DecimalEscape is ≤ CountLeftCapturingParensWithin(the Pattern containing DecimalEscape) CharacterClassEscape[?UnicodeMode] CharacterEscape[?UnicodeMode, ?NamedCaptureGroups] [+NamedCaptureGroups] k GroupName[?UnicodeMode] CharacterEscape[UnicodeMode, NamedCaptureGroups] :: ControlEscape c AsciiLetter 0 [lookahead ∉ DecimalDigit] HexEscapeSequence RegExpUnicodeEscapeSequence[?UnicodeMode] [~UnicodeMode] LegacyOctalEscapeSequence IdentityEscape[?UnicodeMode, ?NamedCaptureGroups] IdentityEscape[UnicodeMode, NamedCaptureGroups] :: [+UnicodeMode] SyntaxCharacter [+UnicodeMode] / [~UnicodeMode] SourceCharacterIdentityEscape[?NamedCaptureGroups] SourceCharacterIdentityEscape[NamedCaptureGroups] :: [~NamedCaptureGroups] SourceCharacter but not c [+NamedCaptureGroups] SourceCharacter but not one of c or k ClassAtomNoDash[UnicodeMode, NamedCaptureGroups] :: SourceCharacter but not one of \ or ] or - \ ClassEscape[?UnicodeMode, ?NamedCaptureGroups] \ [lookahead = c] ClassEscape[UnicodeMode, NamedCaptureGroups] :: b [+UnicodeMode] - [~UnicodeMode] c ClassControlLetter CharacterClassEscape[?UnicodeMode] CharacterEscape[?UnicodeMode, ?NamedCaptureGroups] ClassControlLetter :: DecimalDigit _ Note

同じ左辺が [+UnicodeMode] ガードと [~UnicodeMode] ガードの両方で出現する場合、それは曖昧性解消の優先順位を制御するためである。

B.1.2.1 Static Semantics: Early Errors

22.2.1.1 の意味論は次のように拡張される:

ExtendedAtom :: InvalidBracedQuantifier
  • いずれかのソーステキストがこの生成規則に一致する場合、それは Syntax Error である。

さらに、次の生成規則に対する規則は、強調表示されたテキストの追加によって変更される:

NonemptyClassRanges :: ClassAtom - ClassAtom ClassContents NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassContents

B.1.2.2 Static Semantics: CountLeftCapturingParensWithin and CountLeftCapturingParensBefore

CountLeftCapturingParensWithin および CountLeftCapturingParensBefore の定義において、“ Atom :: ( GroupSpecifieropt Disjunction ) ” への参照は、“ Atom :: ( GroupSpecifieropt Disjunction ) ” または “ ExtendedAtom :: ( GroupSpecifieropt Disjunction ) ” を意味するものとして解釈される。

B.1.2.3 Static Semantics: IsCharacterClass

22.2.1.6 の意味論は次のように拡張される:

ClassAtomNoDash :: \ [lookahead = c]
  1. false を返す。

B.1.2.4 Static Semantics: CharacterValue

22.2.1.7 の意味論は次のように拡張される:

ClassAtomNoDash :: \ [lookahead = c]
  1. U+005C (REVERSE SOLIDUS) の数値を返す。
ClassEscape :: c ClassControlLetter
  1. chClassControlLetter に一致したコードポイントとする。
  2. ich の数値とする。
  3. i を 32 で割った余りを返す。
CharacterEscape :: LegacyOctalEscapeSequence
  1. LegacyOctalEscapeSequence の MV を返す(12.9.4.3 を参照)。

B.1.2.5 Runtime Semantics: CompileSubpattern

CompileSubpattern の意味論は次のように拡張される:

Term :: QuantifiableAssertion Quantifier に対する規則は、AtomQuantifiableAssertion に置き換えることを除き、 Term :: Atom Quantifier に対する規則と同じである。

Term :: ExtendedAtom Quantifier に対する規則は、AtomExtendedAtom に置き換えることを除き、 Term :: Atom Quantifier に対する規則と同じである。

Term :: ExtendedAtom に対する規則は、AtomExtendedAtom に置き換えることを除き、 Term :: Atom に対する規則と同じである。

B.1.2.6 Runtime Semantics: CompileAssertion

Assertion :: (?= Disjunction ) および Assertion :: (?! Disjunction ) 生成規則に対する CompileAssertion 規則は、AssertionQuantifiableAssertion に置き換えて、QuantifiableAssertion 生成規則にも使用される。

B.1.2.7 Runtime Semantics: CompileAtom

Atom :: PatternCharacter を除く Atom 生成規則に対する CompileAtom 規則は、AtomExtendedAtom に置き換えて、ExtendedAtom 生成規則にも使用される。パラメータ direction を持つ次の規則も追加される:

ExtendedAtom :: \ [lookahead = c]
  1. charSet を単一文字 \ U+005C (REVERSE SOLIDUS) を含む CharSet とする。
  2. CharacterSetMatcher(regexpRecord, charSet, false, direction) を返す。
ExtendedAtom :: ExtendedPatternCharacter
  1. chExtendedPatternCharacter によって表される文字とする。
  2. charSet を文字 ch を含む 1 要素の CharSet とする。
  3. CharacterSetMatcher(regexpRecord, charSet, false, direction) を返す。

B.1.2.8 Runtime Semantics: CompileToCharSet

22.2.2.9 の意味論は次のように拡張される:

次の 2 つの規則は、CompileToCharSet の対応する規則を置き換える。

NonemptyClassRanges :: ClassAtom - ClassAtom ClassContents
  1. charSet を、引数 regexpRecord を伴う最初の ClassAtomCompileToCharSet とする。
  2. otherSet を、引数 regexpRecord を伴う 2 番目の ClassAtomCompileToCharSet とする。
  3. remainingSet を、引数 regexpRecord を伴う ClassContentsCompileToCharSet とする。
  4. rangeSetCharacterRangeOrUnion(regexpRecord, charSet, otherSet) とする。
  5. rangeSetremainingSet の和集合を返す。
NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassContents
  1. charSet を、引数 regexpRecord を伴う ClassAtomNoDashCompileToCharSet とする。
  2. otherSet を、引数 regexpRecord を伴う ClassAtomCompileToCharSet とする。
  3. remainingSet を、引数 regexpRecord を伴う ClassContentsCompileToCharSet とする。
  4. rangeSetCharacterRangeOrUnion(regexpRecord, charSet, otherSet) とする。
  5. rangeSetremainingSet の和集合を返す。

さらに、次の規則が CompileToCharSet に追加される。

ClassEscape :: c ClassControlLetter
  1. cv をこの ClassEscapeCharacterValue とする。
  2. c を文字値が cv である文字とする。
  3. 単一文字 c を含む CharSet を返す。
ClassAtomNoDash :: \ [lookahead = c]
  1. 単一文字 \ U+005C (REVERSE SOLIDUS) を含む CharSet を返す。
Note
この生成規則は、文字クラス内のシーケンス \c からのみ到達でき、その後に許容可能な制御文字が続かない場合に限られる。

B.1.2.8.1 CharacterRangeOrUnion ( regexpRecord, charSet, otherSet )

The abstract operation CharacterRangeOrUnion takes arguments regexpRecord (RegExp Record), charSet (CharSet), and otherSet (CharSet) and returns CharSet. It performs the following steps when called:

  1. HasEitherUnicodeFlag(regexpRecord) が false であれば、
    1. charSet がちょうど 1 つの文字を含まない、または otherSet がちょうど 1 つの文字を含まないならば、
      1. remainingSet を単一文字 - U+002D (HYPHEN-MINUS) を含む CharSet とする。
      2. CharSet charSetotherSet、および remainingSet の和集合を返す。
  2. CharacterRange(charSet, otherSet) を返す。

B.1.2.9 Static Semantics: ParsePattern ( patternText, u, v )

22.2.3.4 の意味論は次のように拡張される:

抽象操作 ParsePattern は引数 patternText(Unicode コードポイントのシーケンス)、u(Boolean)、および v(Boolean)を取る。これは呼び出されたとき次の手順を実行する:

  1. vtrue かつ utrue ならば、
    1. parseResult を、1 つ以上の SyntaxError オブジェクトを含む List とする。
  2. そうではなく vtrue ならば、
    1. parseResultParseText(patternText, Pattern[+UnicodeMode, +UnicodeSetsMode, +NamedCaptureGroups]) とする。
  3. そうではなく utrue ならば、
    1. parseResultParseText(patternText, Pattern[+UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups]) とする。
  4. そうでなければ、
    1. parseResultParseText(patternText, Pattern[~UnicodeMode, ~UnicodeSetsMode, ~NamedCaptureGroups]) とする。
    2. parseResultParse Node であり、かつ parseResultGroupName を含むならば、
      1. parseResultParseText(patternText, Pattern[~UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups]) に設定する。
  5. parseResult を返す。

B.2 追加の組込みプロパティ

ECMAScript ホストが web ブラウザーである場合、標準組込みオブジェクトの次の追加プロパティが定義される。

B.2.1 グローバルオブジェクトの追加プロパティ

Table 98 のエントリは、Table 6 に追加される。

Table 98: 追加の Well-known Intrinsic Objects
Intrinsic 名 グローバル名 ECMAScript 言語との関連
%escape% escape escape 関数(B.2.1.1
%unescape% unescape unescape 関数(B.2.1.2

B.2.1.1 escape ( string )

この関数はグローバルオブジェクトのプロパティである。これは、特定のコード単位が 16 進エスケープシーケンスで置き換えられた String 値の新しいバージョンを計算する。

数値が 0x00FF 以下のコード単位を置き換える場合、%xx 形式の 2 桁エスケープシーケンスが使用される。数値が 0x00FF より厳密に大きいコード単位を置き換える場合、%uxxxx 形式の 4 桁エスケープシーケンスが使用される。

これは %escape% intrinsic オブジェクトである。

呼び出されたとき、次の手順を実行する:

  1. string を ? ToString(string) に設定する。
  2. lenstring の長さとする。
  3. result を空の String とする。
  4. unescapedSet を ASCII word character と "@*+-./" の文字列連結とする。
  5. k を 0 とする。
  6. k < len の間、繰り返す:
    1. codeUnitstring 内のインデックス k にあるコード単位とする。
    2. unescapedSetcodeUnit を含むならば、
      1. strcodeUnit とする。
    3. そうでなければ、
      1. ncodeUnit の数値とする。
      2. n < 256 ならば、
        1. hex を、大文字の 16 進数として書式化された n の String 表現とする。
        2. str"%"StringPad(hex, 2, "0", start) の文字列連結とする。
      3. そうでなければ、
        1. hex を、大文字の 16 進数として書式化された n の String 表現とする。
        2. str"%u"StringPad(hex, 4, "0", start) の文字列連結とする。
    4. resultresultstr の文字列連結に設定する。
    5. kk + 1 に設定する。
  7. result を返す。
Note

このエンコーディングは RFC 1738 に記述されたエンコーディングに部分的に基づくが、この標準で指定されるエンコーディング全体は RFC 1738 の内容に関わらず上記で記述されている。このエンコーディングは、RFC 3986 によって RFC 1738 に加えられた変更を反映しない。

B.2.1.2 unescape ( string )

この関数はグローバルオブジェクトのプロパティである。これは、escape 関数によって導入され得る種類の各エスケープシーケンスが、それが表すコード単位に置き換えられた String 値の新しいバージョンを計算する。

これは %unescape% intrinsic オブジェクトである。

呼び出されたとき、次の手順を実行する:

  1. string を ? ToString(string) に設定する。
  2. lenstring の長さとする。
  3. result を空の String とする。
  4. k を 0 とする。
  5. k < len の間、繰り返す:
    1. codeUnitstring 内のインデックス k にあるコード単位とする。
    2. codeUnit がコード単位 0x0025 (PERCENT SIGN) であるならば、
      1. hexDigits を空の String とする。
      2. optionalAdvance を 0 とする。
      3. k + 5 < len であり、かつ string 内のインデックス k + 1 にあるコード単位がコード単位 0x0075 (LATIN SMALL LETTER U) であるならば、
        1. hexDigitsstringk + 2 から k + 6 までの部分文字列に設定する。
        2. optionalAdvance を 5 に設定する。
      4. そうではなく k + 3 ≤ len ならば、
        1. hexDigitsstringk + 1 から k + 3 までの部分文字列に設定する。
        2. optionalAdvance を 2 に設定する。
      5. parseResultParseText(hexDigits, HexDigits[~Sep]) とする。
      6. parseResultParse Node であるならば、
        1. nparseResult の MV とする。
        2. codeUnit を数値が n であるコード単位に設定する。
        3. kk + optionalAdvance に設定する。
    3. resultresultcodeUnit の文字列連結に設定する。
    4. kk + 1 に設定する。
  6. result を返す。

B.2.2 String.prototype オブジェクトの追加プロパティ

B.2.2.1 String.prototype.substr ( start, length )

このメソッドは、this 値を String に変換した結果の部分文字列を返す。これはインデックス start から開始し、length 個のコード単位分だけ続く(または lengthundefined ならば String の末尾まで)。start が負である場合、それは sourceLength + start として扱われる。ここで sourceLength は String の長さである。結果は String 値であり、String オブジェクトではない。

呼び出されたとき、次の手順を実行する:

  1. objthis value とする。
  2. RequireObjectCoercible(obj) を実行する。
  3. str を ? ToString(obj) とする。
  4. sizestr の長さとする。
  5. intStart を ? ToIntegerOrInfinity(start) とする。
  6. intStart = -∞ ならば、intStart を 0 に設定する。
  7. そうではなく intStart < 0 ならば、intStartmax(size + intStart, 0) に設定する。
  8. そうでなければ、intStartmin(intStart, size) に設定する。
  9. lengthundefined ならば intLengthsize とする;そうでなければ intLength を ? ToIntegerOrInfinity(length) とする。
  10. intLength を、intLength を 0 と size の間にクランプした結果に設定する。
  11. intEndmin(intStart + intLength, size) とする。
  12. strintStart から intEnd までの部分文字列を返す。
Note

このメソッドは意図的に generic である。その this 値が String オブジェクトであることを要求しない。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができる。

B.2.2.2 String.prototype.anchor ( name )

このメソッドは、呼び出されたとき次の手順を実行する:

  1. strthis value とする。
  2. CreateHTML(str, "a", "name", name) を返す。

B.2.2.2.1 CreateHTML ( contents, tag, attribute, attrValue )

The abstract operation CreateHTML takes arguments contents (ECMAScript 言語値), tag (String), attribute (String), and attrValue (ECMAScript 言語値) and returns String を含む normal completion または throw completion のいずれか. It performs the following steps when called:

  1. RequireObjectCoercible(contents) を実行する。
  2. contentsStr を ? ToString(contents) とする。
  3. p1"<"tag の文字列連結とする。
  4. attribute が空の String でないならば、
    1. attrValueStr を ? ToString(attrValue) とする。
    2. escapedAttrValue を、attrValueStr 内のコード単位 0x0022 (QUOTATION MARK) の各出現が 6 個のコード単位のシーケンス "&quot;" に置き換えられていることを除き、attrValueStr と同じ String 値とする。
    3. p1 を次の文字列連結に設定する:
      • p1
      • コード単位 0x0020 (SPACE)
      • attribute
      • コード単位 0x003D (EQUALS SIGN)
      • コード単位 0x0022 (QUOTATION MARK)
      • escapedAttrValue
      • コード単位 0x0022 (QUOTATION MARK)
  5. p2p1">" の文字列連結とする。
  6. p3p2contentsStr の文字列連結とする。
  7. p4p3"</"tag、および ">" の文字列連結とする。
  8. p4 を返す。

B.2.2.3 String.prototype.big ( )

このメソッドは、呼び出されたとき次の手順を実行する:

  1. strthis value とする。
  2. CreateHTML(str, "big", "", "") を返す。

B.2.2.4 String.prototype.blink ( )

このメソッドは、呼び出されたとき次の手順を実行する:

  1. strthis value とする。
  2. CreateHTML(str, "blink", "", "") を返す。

B.2.2.5 String.prototype.bold ( )

このメソッドは、呼び出されたとき次の手順を実行する:

  1. strthis value とする。
  2. CreateHTML(str, "b", "", "") を返す。

B.2.2.6 String.prototype.fixed ( )

このメソッドは、呼び出されたとき次の手順を実行する:

  1. strthis value とする。
  2. CreateHTML(str, "tt", "", "") を返す。

B.2.2.7 String.prototype.fontcolor ( colour )

このメソッドは、呼び出されたとき次の手順を実行する:

  1. strthis value とする。
  2. CreateHTML(str, "font", "color", colour) を返す。

B.2.2.8 String.prototype.fontsize ( size )

このメソッドは、呼び出されたとき次の手順を実行する:

  1. strthis value とする。
  2. CreateHTML(str, "font", "size", size) を返す。

B.2.2.9 String.prototype.italics ( )

このメソッドは、呼び出されたとき次の手順を実行する:

  1. strthis value とする。
  2. CreateHTML(str, "i", "", "") を返す。

B.2.2.10 String.prototype.link ( url )

このメソッドは、呼び出されたとき次の手順を実行する:

  1. strthis value とする。
  2. CreateHTML(str, "a", "href", url) を返す。

B.2.2.11 String.prototype.small ( )

このメソッドは、呼び出されたとき次の手順を実行する:

  1. strthis value とする。
  2. CreateHTML(str, "small", "", "") を返す。

B.2.2.12 String.prototype.strike ( )

このメソッドは、呼び出されたとき次の手順を実行する:

  1. strthis value とする。
  2. CreateHTML(str, "strike", "", "") を返す。

B.2.2.13 String.prototype.sub ( )

このメソッドは、呼び出されたとき次の手順を実行する:

  1. strthis value とする。
  2. CreateHTML(str, "sub", "", "") を返す。

B.2.2.14 String.prototype.sup ( )

このメソッドは、呼び出されたとき次の手順を実行する:

  1. strthis value とする。
  2. CreateHTML(str, "sup", "", "") を返す。

B.2.2.15 String.prototype.trimLeft ( )

Note

"trimStart" プロパティが推奨される。"trimLeft" プロパティは主に古いコードとの互換性のために提供される。新しい ECMAScript コードでは "trimStart" プロパティを使用することが推奨される。

"trimLeft" プロパティの初期値は、22.1.3.34 で定義される %String.prototype.trimStart% である。

B.2.2.16 String.prototype.trimRight ( )

Note

"trimEnd" プロパティが推奨される。"trimRight" プロパティは主に古いコードとの互換性のために提供される。新しい ECMAScript コードでは "trimEnd" プロパティを使用することが推奨される。

"trimRight" プロパティの初期値は、22.1.3.33 で定義される %String.prototype.trimEnd% である。

B.2.3 Date.prototype オブジェクトの追加プロパティ

B.2.3.1 Date.prototype.getYear ( )

Note

getFullYear メソッドは、“year 2000 problem” を回避するため、ほぼすべての目的で推奨される。

このメソッドは、呼び出されたとき次の手順を実行する:

  1. dateObjectthis value とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. tNaN であれば、NaN を返す。
  5. YearFromTime(LocalTime(t)) - 1900𝔽 を返す。

B.2.3.2 Date.prototype.setYear ( year )

Note

setFullYear メソッドは、“year 2000 problem” を回避するため、ほぼすべての目的で推奨される。

このメソッドは、呼び出されたとき次の手順を実行する:

  1. dateObjectthis value とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. timedateObject.[[DateValue]] とする。
  4. year を ? ToNumber(year) とする。
  5. timeNaN ならば、time+0𝔽 に設定する;そうでなければ timeLocalTime(time) に設定する。
  6. fullYearMakeFullYear(year) とする。
  7. dayMakeDay(fullYear, MonthFromTime(time), DateFromTime(time)) とする。
  8. dateMakeDate(day, TimeWithinDay(time)) とする。
  9. utcTimestampTimeClip(UTC(date)) とする。
  10. dateObject.[[DateValue]]utcTimestamp に設定する。
  11. utcTimestamp を返す。

B.2.3.3 Date.prototype.toGMTString ( )

Note

toUTCString メソッドが推奨される。このメソッドは主に古いコードとの互換性のために提供される。

"toGMTString" プロパティの初期値は、21.4.4.43 で定義される %Date.prototype.toUTCString% である。

B.2.4 RegExp.prototype オブジェクトの追加プロパティ

B.2.4.1 RegExp.prototype.compile ( pattern, flags )

このメソッドは、呼び出されたとき次の手順を実行する:

  1. objthis value とする。
  2. RequireInternalSlot(obj, [[RegExpMatcher]]) を実行する。
  3. pattern が Object であり、pattern[[RegExpMatcher]] 内部スロットを持つならば、
    1. flagsundefined でないならば、TypeError 例外を投げる。
    2. flagspattern.[[OriginalFlags]] に設定する。
    3. patternpattern.[[OriginalSource]] に設定する。
  4. RegExpInitialize(obj, pattern, flags) を返す。
Note

このメソッドは this value である RegExp を、新しいパターンおよびフラグで完全に再初期化する。実装は、このメソッドの使用を、結果の RegExp オブジェクトが複数回使用され、したがって追加の最適化の候補であるという表明として解釈してよい。

B.3 その他の追加機能

B.3.1 ラベル付き Function Declaration

ECMAScript 2015 より前は、LabelledStatement の仕様は、文ラベルと FunctionDeclaration との関連付けを許可していなかった。しかし、ラベル付き FunctionDeclaration は非 strict コードに対する許容される拡張であり、ほとんどのブラウザーでホストされる ECMAScript 実装はその拡張をサポートしていた。ECMAScript 2015 以降では、LabelledStatement の文法生成規則は LabelledItem として FunctionDeclaration の使用を許可するが、14.13.1 はそれが発生した場合に Syntax Error を生成する Early Error 規則を含む。その規則は、この機能をホストがサポートする場合、非 strict コードでは Syntax Error を抑制するように変更される。

Note

WithStatementIfStatement、および IterationStatementearly error 規則は、これらの文が非 strict コード内でラベル付き FunctionDeclaration を含むことを防ぐ。

B.3.2 ブロックレベル Function Declaration の Web レガシー互換性意味論

ECMAScript 2015 より前は、ECMAScript 仕様は Block 文の StatementList の要素としての FunctionDeclaration の出現を定義していなかった。しかし、その形式の FunctionDeclaration のサポートは許容される拡張であり、ほとんどのブラウザーでホストされる ECMAScript 実装はそれらを許可していた。残念ながら、そのような宣言の意味論はそれらの実装間で異なる。これらの意味論上の違いのため、Block レベルの関数宣言を使用する既存の web ECMAScript ソーステキストは、その使用がそのような宣言に対するすべてのブラウザー実装の意味論の共通部分にのみ依存する場合に限り、ブラウザー実装間で移植可能である。次は、その共通部分の意味論に含まれるユースケースである:

  1. 関数が宣言され、単一のブロック内でのみ参照される。

  2. 関数が宣言され、単一の Block 内で使用される可能性があるが、その同じ Block 内に含まれていない内側の関数定義によっても参照される。

    • BindingIdentifier が名前 f である 1 つ以上の FunctionDeclaration が、包含関数 g関数コード内に現れ、その宣言が Block 内にネストされている。
    • var 宣言でない f の他の宣言が、g関数コード内に存在しない。
    • IdentifierReference としての f の出現が、f の宣言を含む BlockStatementList 内に存在してよい。
    • g 内にネストされた別の関数 h 内に、IdentifierReference としての f の出現が少なくとも 1 つ存在し、h 内からの f への参照を shadow する f の他の宣言が存在しない。
    • h のすべての呼び出しは、f の宣言が評価された後に発生する。
  3. 関数が宣言され、単一のブロック内で使用される可能性があるが、後続のブロック内でも参照される。

最初のユースケースは、ECMAScript 2015 によって提供される Block レベルの関数宣言の意味論と相互運用可能である。そのユースケースを用いる既存の ECMAScript ソーステキストはすべて、1014、および 15 の各節で定義されるブロックレベル関数宣言の意味論を使用して動作する。

2 番目および 3 番目のユースケースについて ECMAScript 2015 との相互運用性を得るには、節 10、節 15、節 19.2.1、および節 16.1.7 の意味論に対する次の拡張が必要である。

ECMAScript 実装が診断警告メッセージを報告する機構を持つ場合、これらの互換性意味論が適用され、非互換性意味論との差異が観測可能に導入される FunctionDeclaration をコードが含むとき、警告が生成されるべきである。例えば、var binding の導入が early error を作るために導入されない場合、警告メッセージは生成されるべきではない。

この機能は、次の箇所で特別な意味論を伴う:

B.3.3 IfStatement の Statement 節内の FunctionDeclaration

次は、14.6IfStatement 生成規則を拡張する:

IfStatement[Yield, Await, Return] : if ( Expression[+In, ?Yield, ?Await] ) FunctionDeclaration[?Yield, ?Await, ~Default] else Statement[?Yield, ?Await, ?Return] if ( Expression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return] else FunctionDeclaration[?Yield, ?Await, ~Default] if ( Expression[+In, ?Yield, ?Await] ) FunctionDeclaration[?Yield, ?Await, ~Default] else FunctionDeclaration[?Yield, ?Await, ~Default] if ( Expression[+In, ?Yield, ?Await] ) FunctionDeclaration[?Yield, ?Await, ~Default] [lookahead ≠ else]

この生成規則は、非 strict コードを解析するときにのみ適用される。この生成規則に一致したソーステキストは、FunctionDeclaration[?Yield, ?Await, ~Default] の各一致出現が、ソーステキスト内のその位置を占める BlockStatement の唯一の StatementListItem であるかのように処理される。そのような合成 BlockStatement の意味論には、B.3.2 で指定される web レガシー互換性意味論が含まれる。

B.3.4 Catch ブロック内の VariableStatement

この機能では、Catch 節の Block が、CatchParameter によっても束縛される名前を束縛する var 宣言を含んでよい。これは、14.15.1 における Catch : catch ( CatchParameter ) Block に対する early error 規則を変更することによって実現される。

Note

実行時、そのような binding は VariableDeclarationEnvironment 内でインスタンス化される。それらは CatchParameter によって導入された同名の binding を shadow しないため、そのような var 宣言の Initializer は、var binding ではなく対応する catch parameter に代入する。

この変更された振る舞いは、Catch 節の Block 内に含まれる direct eval 呼び出しによって導入される var および function 宣言にも適用される。この変更は、EvalDeclarationInstantiation 内の step 3.d.i.2.a.i および 13.b.ii.4.a.i.i を変更することによって実現される。

B.3.5 ForIn 文ヘッド内の Initializer

次は、14.7.5ForInOfStatement 生成規則を拡張する:

ForInOfStatement[Yield, Await, Return] : for ( var BindingIdentifier[?Yield, ?Await] Initializer[~In, ?Yield, ?Await] in Expression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return]

この生成規則は、非 strict コードを解析するときにのみ適用される。

8.3.1ContainsDuplicateLabelsstatic semantics は、次で拡張される:

ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement
  1. 引数 labelSet を伴う StatementContainsDuplicateLabels を返す。

8.3.2ContainsUndefinedBreakTargetstatic semantics は、次で拡張される:

ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement
  1. 引数 labelSet を伴う StatementContainsUndefinedBreakTarget を返す。

8.3.3ContainsUndefinedContinueTargetstatic semantics は、次で拡張される:

ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement
  1. 引数 iterationSet および « » を伴う StatementContainsUndefinedContinueTarget を返す。

14.7.5.2IsDestructuringstatic semantics は、次で拡張される:

BindingIdentifier : Identifier yield await
  1. false を返す。

8.2.6VarDeclaredNamesstatic semantics は、次で拡張される:

ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement
  1. names1BindingIdentifierBoundNames とする。
  2. names2StatementVarDeclaredNames とする。
  3. names1names2 のリスト連結を返す。

8.2.7VarScopedDeclarationsstatic semantics は、次で拡張される:

ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement
  1. declarations1 を « BindingIdentifier » とする。
  2. declarations2StatementVarScopedDeclarations とする。
  3. declarations1declarations2 のリスト連結を返す。

14.7.5.5ForInOfLoopEvaluationruntime semantics は、次で拡張される:

ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement
  1. bindingIdBindingIdentifierStringValue とする。
  2. lhs を ? ResolveBinding(bindingId) とする。
  3. IsAnonymousFunctionDefinition(Initializer) が true ならば、
    1. value を、引数 bindingId を伴う InitializerNamedEvaluation とする。
  4. そうでなければ、
    1. rhsInitializer の ? Evaluation とする。
    2. value を ? GetValue(rhs) とする。
  5. PutValue(lhs, value) を実行する。
  6. keyResult を ? ForIn/OfHeadEvaluation(« », Expression, enumerate) とする。
  7. ForIn/OfBodyEvaluation(BindingIdentifier, Statement, keyResult, enumerate, var-binding, labelSet) を返す。

B.3.6 [[IsHTMLDDA]] 内部スロット

[[IsHTMLDDA]] 内部スロットは、host-defined オブジェクト上に存在し得る。[[IsHTMLDDA]] 内部スロットを持つオブジェクトは、ToBoolean および IsLooselyEqual 抽象操作において、また typeof 演算子のオペランドとして使用されるとき、undefined のように振る舞う。

Note

[[IsHTMLDDA]] 内部スロットを持つオブジェクトは、この仕様によって作成されることは決してない。しかし、web ブラウザーの document.all オブジェクトは、web 互換性のために存在する、このスロットを持つ host-defined exotic object である。この種類のオブジェクトの既知の他の例は存在せず、実装は document.all を除き、これを持つものを作成するべきではない。

この機能は、次の箇所で特別な意味論を伴う:

B.3.7 HostMakeJobCallback における非既定の振る舞い

HostMakeJobCallback 抽象操作は、web ブラウザーであるホストが非既定の振る舞いを指定することを許可する。

B.3.8 HostEnsureCanAddPrivateElement における非既定の振る舞い

HostEnsureCanAddPrivateElement 抽象操作は、web ブラウザーであるホストが非既定の振る舞いを指定することを許可する。

B.3.9 関数呼び出し代入ターゲットに対する実行時エラー

非 strict コードにおいて関数呼び出し(13.3.6)が代入ターゲットとして使用される場合、early error を生成する代わりに、代入の評価中に ReferenceError 例外が投げられる。

Note

代入ターゲットが AssignmentExpressionLeftHandSideExpression である場合、代入演算子は = または AssignmentOperator でなければならない。特に、ここでの許可は論理代入演算子(??=&&=||=)には適用されない。

CallExpression : CoverCallExpressionAndAsyncArrowHead および CallExpression : CallExpression Arguments に対する AssignmentTargetType の step 1 を参照。