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

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

本附属書で定義される一部の機能は本附属書内に記述され、他の一部は本文(メイン仕様)内に記述される。

ある機能が本文で規定されている場合、その機能が文書に影響する各箇所は彩色されたボックス内の "Normative Optional" という語で示される。さらに、アルゴリズムや早期エラー規則中で特定の文言がその機能に依存する場合、それは「その関連機能を the host supportsホストがサポートする)」という条件でガードされる。Web ブラウザはそのような機能をすべてサポートすることが要求される。

Note

この附属書は各種レガシー機能および Web ブラウザ ECMAScript ホストの特性を記述する。本附属書に規定される言語機能と挙動は一つ以上の望ましくない特性を持ち、レガシー利用が存在しなければ仕様から削除されるものである。しかし多数の既存 Web ページがこれら機能を利用しているため、Web ブラウザは継続的なサポートが必要である。本附属書の規定はこれらレガシー機能の相互運用可能な実装要件を定義する。

これら機能は 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

LineTerminator のコードポイントを含む 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 静的意味論: 早期エラー

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

ExtendedAtom :: InvalidBracedQuantifier
  • この生成規則にマッチするソーステキストが存在する場合は Syntax Error である。

さらに、以下の生成規則に対する規則は 強調された 追加文言を含むよう修正される:

NonemptyClassRanges :: ClassAtom - ClassAtom ClassContents
  • 最初の ClassAtom の IsCharacterClass が true または 2 番目の ClassAtom の IsCharacterClass が true かつ本生成規則が [UnicodeMode] パラメータを持つ 場合は Syntax Error。
  • 最初の ClassAtom の IsCharacterClass が false、2 番目の ClassAtom の IsCharacterClass が false で、最初の ClassAtom の CharacterValue が 2 番目より厳密に大きい場合は Syntax Error。
NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassContents
  • ClassAtomNoDash の IsCharacterClass が true または ClassAtom の IsCharacterClass が true かつ本生成規則が [UnicodeMode] パラメータを持つ 場合は Syntax Error。
  • ClassAtomNoDash の IsCharacterClass が falseClassAtom の IsCharacterClass が false で、ClassAtomNoDash の CharacterValue が ClassAtom の CharacterValue より厳密に大きい場合は Syntax Error。

B.1.2.2 静的意味論: CountLeftCapturingParensWithin / CountLeftCapturingParensBefore

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

B.1.2.3 静的意味論: IsCharacterClass

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

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

B.1.2.4 静的意味論: 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 実行時意味論: CompileSubpattern

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

Term :: QuantifiableAssertion Quantifier の規則は Term :: Atom Quantifier の規則と同一だが AtomQuantifiableAssertion に置き換える。

Term :: ExtendedAtom Quantifier の規則は Term :: Atom Quantifier の規則と同一だが AtomExtendedAtom に置き換える。

Term :: ExtendedAtom の規則は Term :: Atom の規則と同一だが AtomExtendedAtom に置き換える。

B.1.2.6 実行時意味論: CompileAssertion

Assertion :: (?= Disjunction ) および Assertion :: (?! Disjunction ) の CompileAssertion 規則は QuantifiableAssertion 生成規則にも用いられるが、AssertionQuantifiableAssertion に置き換える。

B.1.2.7 実行時意味論: CompileAtom

Atom 生成規則( Atom :: PatternCharacter を除く)に対する CompileAtom 規則は ExtendedAtom 生成規則にも用いられ、AtomExtendedAtom に置き換える。さらに parameter direction を伴う以下の規則が追加される:

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

B.1.2.8 実行時意味論: CompileToCharSet

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

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

NonemptyClassRanges :: ClassAtom - ClassAtom ClassContents
  1. A を第 1 の ClassAtom に対し引数 rer で CompileToCharSet を適用した結果とする。
  2. B を第 2 の ClassAtom に対し引数 rer で CompileToCharSet を適用した結果とする。
  3. CClassContents に対し引数 rer で CompileToCharSet を適用した結果とする。
  4. DCharacterRangeOrUnion(rer, A, B) とする。
  5. DC の和集合を返す。
NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassContents
  1. AClassAtomNoDash に対し引数 rer で CompileToCharSet を適用した結果とする。
  2. BClassAtom に対し引数 rer で CompileToCharSet を適用した結果とする。
  3. CClassContents に対し引数 rer で CompileToCharSet を適用した結果とする。
  4. DCharacterRangeOrUnion(rer, A, B) とする。
  5. DC の和集合を返す。

加えて、以下の規則が CompileToCharSet に追加される。

ClassEscape :: c ClassControlLetter
  1. cv をこの ClassEscape の CharacterValue とする。
  2. c を文字値が cv の文字とする。
  3. 文字 c を単一要素として含む CharSet を返す。
ClassAtomNoDash :: \ [lookahead = c]
  1. 単一文字 \ U+005C (REVERSE SOLIDUS) を含む CharSet を返す。
Note
この生成規則は、受容可能な制御文字が続かない文字クラス内部のシーケンス \c からのみ到達し得る。

B.1.2.8.1 CharacterRangeOrUnion ( rer, A, B )

The abstract operation CharacterRangeOrUnion takes arguments rer (a RegExp Record), A (a CharSet), and B (a CharSet) and returns a CharSet. It performs the following steps when called:

  1. HasEitherUnicodeFlag(rer) が false なら
    1. もし A がちょうど 1 文字を含むわけではない、または B がちょうど 1 文字を含むわけではないなら
      1. C を単一文字 - U+002D (HYPHEN-MINUS) を含む CharSet とする。
      2. CharSet A, B, C の和集合を返す。
  2. CharacterRange(A, B) を返す。

B.1.2.9 静的意味論: 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. parseResult を ParseText(patternText, Pattern[+UnicodeMode, +UnicodeSetsMode, +NamedCaptureGroups]) とする。
  3. それ以外で utrue なら
    1. parseResult を ParseText(patternText, Pattern[+UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups]) とする。
  4. それ以外
    1. parseResult を ParseText(patternText, Pattern[~UnicodeMode, ~UnicodeSetsMode, ~NamedCaptureGroups]) とする。
    2. もし parseResult が Parse Node でかつ GroupName を含むなら
      1. parseResult を ParseText(patternText, Pattern[~UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups]) に設定する。
  5. parseResult を返す。

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

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

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

Table 100 の項目が Table 6 に追加される。

Table 100: Additional Well-known Intrinsic Objects
Intrinsic Name Global Name ECMAScript Language Association
%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% イントリンシックオブジェクトである。

呼び出し時、次の手順を実行する:

  1. string を ? ToString(string) に設定する。
  2. lenstring の長さとする。
  3. R を空文字列とする。
  4. unescapedSet を ASCII の単語構成文字と "@*+-./"文字列連結とする。
  5. k を 0 とする。
  6. 繰り返し (k < len の間):
    1. Cstring 内インデックス k のコードユニットとする。
    2. もし unescapedSetC を含むなら
      1. SC とする。
    3. それ以外
      1. nC の数値値とする。
      2. もし n < 256 なら
        1. hexn の大文字 16 進表現とする。
        2. S"%"StringPad(hex, 2, "0", start) の連結とする。
      3. それ以外
        1. hexn の大文字 16 進表現とする。
        2. S"%u"StringPad(hex, 4, "0", start) の連結とする。
    4. RRS の連結に設定する。
    5. kk + 1 に設定する。
  7. R を返す。
Note

このエンコーディングは部分的に RFC 1738 に記述されたエンコーディングに基づくが、本標準で規定されるエンコーディング全体は RFC 1738 の内容を参照せず上記で完結している。このエンコーディングは RFC 3986 による RFC 1738 への変更を反映しない。

B.2.1.2 unescape ( string )

この関数はグローバルオブジェクトのプロパティである。escape 関数によって導入され得る種類の各エスケープシーケンスを、その表すコードユニットへ置換した新しい String 値を生成する。

これは %unescape% イントリンシックオブジェクトである。

呼び出し時、次の手順を実行する:

  1. string を ? ToString(string) に設定する。
  2. lenstring の長さとする。
  3. R を空文字列とする。
  4. k を 0 とする。
  5. 繰り返し (k < len の間):
    1. Cstring 内インデックス k のコードユニットとする。
    2. もし C がコードユニット 0x0025 (PERCENT SIGN) なら
      1. hexDigits を空文字列とする。
      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. parseResult を ParseText(hexDigits, HexDigits[~Sep]) とする。
      6. もし parseResult が Parse Node なら
        1. nparseResult の MV とする。
        2. C を数値値 n のコードユニットとする。
        3. kk + optionalAdvance に設定する。
    3. RRC の連結に設定する。
    4. kk + 1 に設定する。
  6. R を返す。

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

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

このメソッドは this 値を String に変換した結果の substring を返す。開始インデックス start から length 個のコードユニット(lengthundefined の場合末尾まで)を含む。start が負なら sourceLength を文字列長として sourceLength + start として扱う。結果は String 値であり String オブジェクトではない。

呼び出し時、次を行う:

  1. Othis 値とする。
  2. RequireObjectCoercible(O) を実行する。
  3. S を ? ToString(O) とする。
  4. sizeS の長さとする。
  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 を 0 と size の間にクランプした結果に設定する。
  11. intEndmin(intStart + intLength, size) とする。
  12. SintStart から intEnd までの substring を返す。
Note

このメソッドは意図的にジェネリックであり、this 値が String オブジェクトであることを要求しない。他オブジェクトへメソッドとして移して使用できる。

B.2.2.2 String.prototype.anchor ( name )

呼び出し時、次を行う:

  1. Sthis 値とする。
  2. CreateHTML(S, "a", "name", name) を返す。

B.2.2.2.1 CreateHTML ( string, tag, attribute, value )

The abstract operation CreateHTML takes arguments string (an ECMAScript language value), tag (a String), attribute (a String), and value (an ECMAScript language value) and returns 正常完了で String を含むか、または throw completion. It performs the following steps when called:

  1. RequireObjectCoercible(string) を実行する。
  2. S を ? ToString(string) とする。
  3. p1"<"tag の連結とする。
  4. もし attribute が空文字列でなければ
    1. V を ? ToString(value) とする。
    2. escapedVV 内の各 0x0022 (QUOTATION MARK) を 6 コードユニット列 "&quot;" に置換した文字列値とする。
    3. p1 を以下の連結とする:
      • p1
      • 0x0020 (SPACE)
      • attribute
      • 0x003D (EQUALS SIGN)
      • 0x0022 (QUOTATION MARK)
      • escapedV
      • 0x0022 (QUOTATION MARK)
  5. p2p1">" の連結とする。
  6. p3p2S の連結とする。
  7. p4p3, "</", tag, ">" の連結とする。
  8. p4 を返す。

B.2.2.3 String.prototype.big ( )

呼び出し時、次を行う:

  1. Sthis 値とする。
  2. CreateHTML(S, "big", "", "") を返す。

B.2.2.4 String.prototype.blink ( )

呼び出し時、次を行う:

  1. Sthis 値とする。
  2. CreateHTML(S, "blink", "", "") を返す。

B.2.2.5 String.prototype.bold ( )

呼び出し時、次を行う:

  1. Sthis 値とする。
  2. CreateHTML(S, "b", "", "") を返す。

B.2.2.6 String.prototype.fixed ( )

呼び出し時、次を行う:

  1. Sthis 値とする。
  2. CreateHTML(S, "tt", "", "") を返す。

B.2.2.7 String.prototype.fontcolor ( colour )

呼び出し時、次を行う:

  1. Sthis 値とする。
  2. CreateHTML(S, "font", "color", colour) を返す。

B.2.2.8 String.prototype.fontsize ( size )

呼び出し時、次を行う:

  1. Sthis 値とする。
  2. CreateHTML(S, "font", "size", size) を返す。

B.2.2.9 String.prototype.italics ( )

呼び出し時、次を行う:

  1. Sthis 値とする。
  2. CreateHTML(S, "i", "", "") を返す。

B.2.2.10 String.prototype.link ( url )

呼び出し時、次を行う:

  1. Sthis 値とする。
  2. CreateHTML(S, "a", "href", url) を返す。

B.2.2.11 String.prototype.small ( )

呼び出し時、次を行う:

  1. Sthis 値とする。
  2. CreateHTML(S, "small", "", "") を返す。

B.2.2.12 String.prototype.strike ( )

呼び出し時、次を行う:

  1. Sthis 値とする。
  2. CreateHTML(S, "strike", "", "") を返す。

B.2.2.13 String.prototype.sub ( )

呼び出し時、次を行う:

  1. Sthis 値とする。
  2. CreateHTML(S, "sub", "", "") を返す。

B.2.2.14 String.prototype.sup ( )

呼び出し時、次を行う:

  1. Sthis 値とする。
  2. CreateHTML(S, "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

“2000 年問題” を回避できるため、ほぼ全ての目的で getFullYear メソッドが推奨される。

このメソッドは呼び出し時に次を行う:

  1. dateObjectthis 値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. もし tNaN なら NaN を返す。
  5. YearFromTime(LocalTime(t)) - 1900𝔽 を返す。

B.2.3.2 Date.prototype.setYear ( year )

Note

“2000 年問題” を回避できるため、ほぼ全ての目的で setFullYear メソッドが推奨される。

このメソッドは呼び出し時に次を行う:

  1. dateObjectthis 値とする。
  2. RequireInternalSlot(dateObject, [[DateValue]]) を実行する。
  3. tdateObject.[[DateValue]] とする。
  4. y を ? ToNumber(year) とする。
  5. もし tNaN なら t+0𝔽 に、そうでなければ tLocalTime(t) に設定する。
  6. yyyyMakeFullYear(y) とする。
  7. dMakeDay(yyyy, MonthFromTime(t), DateFromTime(t)) とする。
  8. dateMakeDate(d, TimeWithinDay(t)) とする。
  9. uTimeClip(UTC(date)) とする。
  10. dateObject.[[DateValue]]u に設定する。
  11. u を返す。

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. Othis 値とする。
  2. RequireInternalSlot(O, [[RegExpMatcher]]) を実行する。
  3. もし pattern が Object で [[RegExpMatcher]] 内部スロットを持つなら
    1. もし flagsundefined でなければ TypeError 例外を投げる。
    2. Ppattern.[[OriginalSource]] とする。
    3. Fpattern.[[OriginalFlags]] とする。
  4. それ以外
    1. Ppattern とする。
    2. Fflags とする。
  5. RegExpInitialize(O, P, F) を返す。
Note

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

B.3 その他の追加機能

B.3.1 ラベル付き Function 宣言

ECMAScript 2015 以前、LabelledStatement の仕様は FunctionDeclaration にステートメントラベルを関連付けることを許可していなかった。しかし非 strict コード向けの拡張として許容され、多くのブラウザホスト実装はそれをサポートしていた。ECMAScript 2015 以降、LabelledStatement の文法生成規則は FunctionDeclarationLabelledItem として許容するが、14.13.1早期エラー規則がそれを Syntax Error とする。その規則はホストがこの機能をサポートする場合、非 strict コードで Syntax Error を抑制するよう修正される。

Note

WithStatement, IfStatement, IterationStatement早期エラー規則は非 strict コード内でこれらのステートメントがラベル付き FunctionDeclaration を含むことを防ぐ。

B.3.2 ブロックレベル Function 宣言 (Web レガシー互換意味論)

ECMAScript 2015 以前、Block ステートメントの StatementList 要素として FunctionDeclaration が出現することは ECMAScript 仕様で定義されていなかった。しかしその形式は拡張として許容され、多くのブラウザ実装で許可されていた。不幸にも実装間で意味論が異なる。これらの差異のため、Block レベルの function 宣言を用いる既存 Web ソースは、全ブラウザ実装の意味論的交差に依存する場合のみ移植性がある。以下はその交差意味論に属するユースケースである:

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

  2. 関数が 1 つの Block 内で宣言され(必要なら使用される)さらに同一 Block 外の内側関数定義から参照される。

    • 識別子 fBindingIdentifier とする 1 つ以上の FunctionDeclaration が外側関数 g の関数コード内の Block にネストして現れる。
    • g の関数コード内に var 以外の f の他の宣言が存在しない。
    • fIdentifierReference 出現が宣言を含む BlockStatementList 内に存在してもよい。
    • g 内にネストした別の関数 h 内に fIdentifierReference 出現が少なくとも 1 つ存在し、h 内からの参照を隠す f の他の宣言がない。
    • h の呼び出しは f の宣言が評価された後にのみ起こる。
  3. 関数が 1 つのブロック内で宣言され(必要なら使用され)さらに後続のブロック内で参照される。

最初のユースケースは ECMAScript 2015 が提供する Block レベル function 宣言の意味論と相互運用可能である。このユースケースを用いる既存のソースは 101415 で定義される意味論を用いて動作する。

2 番目と 3 番目のユースケースの ECMAScript 2015 相互運用性には、101519.2.116.1.7 節の意味論への以下の拡張が必要である。

実装が診断警告メッセージを報告する仕組みを持つ場合、この互換意味論が適用され非互換意味論との差異が観測可能となる FunctionDeclaration を含むコードに対して警告を出すべきである。例えば var バインディングの導入が早期エラーを生むために導入されない場合は警告を出すべきでない。

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

B.3.3 IfStatement の節内 FunctionDeclarations

以下は 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] の一致がその位置に 1 つの BlockStatement の唯一の StatementListItem として存在するかのように処理される。その合成 BlockStatement の意味論は B.3.2 で指定される Web レガシー互換意味論を含む。

B.3.4 Catch ブロック内の VariableStatements

この機能では、Catch 節の BlockCatchParameter によってもバインドされる名前を var 宣言でバインドできる。これは 14.15.1 Catch : catch ( CatchParameter ) Block 早期エラー規則を修正することで達成する。

Note

実行時にはそのようなバインディングは VariableDeclarationEnvironment にインスタンス化される。同名の CatchParameter によって導入されたバインディングをシャドウせず、そのような var 宣言の Initializer は catch パラメータに代入する。

この変更は Catch 節の Block 内に含まれる direct eval 呼び出しによって導入される var および function 宣言にも適用される。この変更は EvalDeclarationInstantiation3.d.i.2.a.i および 13.b.ii.4.a.i.i ステップを修正することで行う。

B.3.5 ForIn 文ヘッドの Initializer

以下は 14.7.5 における ForInOfStatement 生成規則を拡張する:

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.1 の ContainsDuplicateLabels の静的意味論は以下で拡張される:

ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement
  1. Statement の ContainsDuplicateLabels を引数 labelSet で返す。

8.3.2 の ContainsUndefinedBreakTarget の静的意味論は以下で拡張される:

ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement
  1. Statement の ContainsUndefinedBreakTarget を引数 labelSet で返す。

8.3.3 の ContainsUndefinedContinueTarget の静的意味論は以下で拡張される:

ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement
  1. Statement の ContainsUndefinedContinueTarget を引数 iterationSet と « » で返す。

14.7.5.2 の IsDestructuring の静的意味論は以下で拡張される:

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

8.2.6 の VarDeclaredNames の静的意味論は以下で拡張される:

ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement
  1. names1BindingIdentifier の BoundNames とする。
  2. names2Statement の VarDeclaredNames とする。
  3. names1names2リスト結合を返す。

8.2.7 の VarScopedDeclarations の静的意味論は以下で拡張される:

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

14.7.5.5 の ForInOfLoopEvaluation の実行時意味論は以下で拡張される:

ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement
  1. bindingIdBindingIdentifier の StringValue とする。
  2. lhs を ? ResolveBinding(bindingId) とする。
  3. もし IsAnonymousFunctionDefinition(Initializer) が true なら
    1. value を ? NamedEvaluation(Initializer, 引数 bindingId) とする。
  4. それ以外
    1. rhs を ? Evaluation(Initializer) とする。
    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]] internal slot が存在する場合がある。この内部スロットを持つオブジェクトは ToBoolean 抽象操作および IsLooselyEqual 抽象操作、ならびに typeof 演算子 の被演算子として使用されると undefined のように振る舞う。

Note

[[IsHTMLDDA]] 内部スロットを持つオブジェクトは本仕様によって生成されない。ただし Web 互換性のために存在するブラウザの document.all オブジェクト はこのスロットを持つホスト定義エキゾチックオブジェクトである。この種の他の例は知られておらず、実装は document.all を例外として新たに作成すべきでない。

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

B.3.7 HostMakeJobCallback における非デフォルト挙動

HostMakeJobCallback 抽象操作は Web ブラウザであるホストが非デフォルト挙動を指定することを許可する。

B.3.8 HostEnsureCanAddPrivateElement における非デフォルト挙動

HostEnsureCanAddPrivateElement 抽象操作は Web ブラウザであるホストが非デフォルト挙動を指定することを許可する。

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

非 strict コードで関数呼び出し (13.3.6) が代入ターゲットとして用いられる場合、早期エラーを生成する代わりに、代入の評価中に ReferenceError がスローされる。

Note

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

CallExpression : CoverCallExpressionAndAsyncArrowHead および CallExpression : CallExpression Arguments に関する AssignmentTargetType の 1 ステップを参照。