ページ表示設定

附属書 B (規定) Web ブラウザー向けの追加 ECMAScript 機能

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

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

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

注

この附属書では、Web ブラウザーの ECMAScript ホストにおけるさまざまな legacy 機能およびその他の特性について説明します。この附属書で規定されるすべての言語機能および動作には、1つ以上の望ましくない特性があり、legacy な使用がなければこの仕様から削除されるものです。しかし、多数の既存 Web ページがこれらの機能を使用しているため、Web ブラウザーはこれらを引き続きサポートしなければなりません。この附属書の仕様は、これらの legacy 機能を相互運用可能に実装するための要件を定義します。

これらの機能は、ECMAScript コア言語の一部とはみなされません。プログラマーは、新しい ECMAScript コードを記述するとき、これらの機能および動作を使用したり、その存在を前提としたりするべきではありません。ECMAScript 実装は、その実装が Web ブラウザーの一部である場合、または Web ブラウザーが遭遇するものと同じ legacy ECMAScript コードを実行する必要がある場合を除き、これらの機能を実装しないことが推奨されます。

B.1 追加の構文

B.1.1 HTML-like コメント

12.4 の構文および意味論は、goal symbol 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

line terminator コードポイントを含む MultiLineComment と同様に、SingleLineHTMLCloseComment は構文文法による解析の目的では LineTerminator とみなされます。

B.1.2 正規表現パターン

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

この代替パターン文法および意味論は、BMP パターンの構文および意味論だけを変更します。次の文法拡張には、[UnicodeMode] パラメーターでパラメーター化された生成規則が含まれます。ただし、これらの拡張はいずれも、goal symbol に [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 _ 注

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

B.1.2.1 Static Semantics: 早期エラー

22.2.1.1 の意味論は、次のように拡張されます。

ExtendedAtom :: InvalidBracedQuantifier
  • この生成規則によって何らかのソーステキストが一致する場合、Syntax Error です。

さらに、次の生成規則のルールは、強調表示されたテキストを追加することで変更されます。

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

B.1.2.2 Static Semantics: CountLeftCapturingParensWithin および CountLeftCapturingParensBefore

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

B.1.2.3 Static Semantics: IsCharacterClass

IsCharacterClass の意味論は、次のように拡張されます。

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

B.1.2.4 Static Semantics: CharacterValue

CharacterValue の意味論は、次のように拡張されます。

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

B.1.2.5 Runtime Semantics: CompileSubpattern

引数 regexpRecord および direction を持つ CompileSubpattern の意味論は、次のように拡張されます。

Term :: QuantifiableAssertion Quantifier のルールは、Atom の代わりに QuantifiableAssertion を使用することを除き、 Term :: Atom Quantifier と同じです。

Term :: ExtendedAtom Quantifier のルールは、Atom の代わりに ExtendedAtom を使用することを除き、 Term :: Atom Quantifier と同じです。

Term :: ExtendedAtom のルールは、Atom の代わりに ExtendedAtom を使用することを除き、 Term :: Atom と同じです。

B.1.2.6 Runtime Semantics: CompileAssertion

引数 regexpRecord を持つ CompileAssertion の意味論は、次のように拡張されます。

QuantifiableAssertion :: (?= Disjunction ) のルールは、Atom の代わりに QuantifiableAssertion を使用することを除き、 Assertion :: (?= Disjunction ) と同じです。

QuantifiableAssertion :: (?! Disjunction ) のルールは、Atom の代わりに QuantifiableAssertion を使用することを除き、 Assertion :: (?! Disjunction ) と同じです。

B.1.2.7 Runtime Semantics: CompileAtom

引数 regexpRecord および direction を持つ CompileAtom の意味論は、次のように拡張されます。

Atom :: PatternCharacter を除く Atom の生成規則のルールは、Atom の代わりに ExtendedAtom を使用して ExtendedAtom の生成規則にも使用されます。

次のルールも追加されます。

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

B.1.2.8 Runtime Semantics: CompileToCharSet

引数 regexpRecord を持つ CompileToCharSet の意味論は、次のように拡張されます。

2つのルールが置き換えられます。

NonemptyClassRanges :: ClassAtom - ClassAtom ClassContents
  1. charSet を、引数 regexpRecord を持つ最初の ClassAtom の CompileToCharSet とする。
  2. otherSet を、引数 regexpRecord を持つ2番目の ClassAtom の CompileToCharSet とする。
  3. remainingSet を、引数 regexpRecord を持つ ClassContents の CompileToCharSet とする。
  4. rangeSet を CharacterRangeOrUnion(regexpRecord, charSet, otherSet) とする。
  5. rangeSet と remainingSet の和集合を返す。
NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassContents
  1. charSet を、引数 regexpRecord を持つ ClassAtomNoDash の CompileToCharSet とする。
  2. otherSet を、引数 regexpRecord を持つ ClassAtom の CompileToCharSet とする。
  3. remainingSet を、引数 regexpRecord を持つ ClassContents の CompileToCharSet とする。
  4. rangeSet を CharacterRangeOrUnion(regexpRecord, charSet, otherSet) とする。
  5. rangeSet と remainingSet の和集合を返す。

次のルールも追加されます。

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

B.1.2.8.1 CharacterRangeOrUnion ( regexpRecord, charSet, otherSet )

抽象操作 CharacterRangeOrUnion。引数 regexpRecord (RegExpレコード)、charSet (CharSet) および otherSet (CharSet)。戻り値:CharSet。 呼び出されると、次の手順を実行する。

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

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

引数 patternText、u、および v を持つ ParsePattern の意味論は、強調表示された変更を伴って次のように拡張されます。

  1. v が true かつ u が true である場合、
    1. parseResult を1つ以上の SyntaxError オブジェクトを含む List とする。
  2. そうでなく、v が true である場合、
    1. parseResult を ParseText(patternText, Pattern[+UnicodeMode, +UnicodeSetsMode, +NamedCaptureGroups]) とする。
  3. そうでなく、u が true である場合、
    1. parseResult を ParseText(patternText, Pattern[+UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups]) とする。
  4. そうでない場合、
    1. parseResult を ParseText(patternText, Pattern[~UnicodeMode, ~UnicodeSetsMode, ~NamedCaptureGroups]) とする。
    2. parseResult が Parse Node であり、かつ parseResult が GroupName を含む場合、
      1. parseResult を ParseText(patternText, Pattern[~UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups]) に設定する。
  5. parseResult を返す。

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

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

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

表 103 の項目が 表 6 に追加されます。

表 103: 追加の Well-known Intrinsic オブジェクト
Intrinsic 名 グローバル名 ECMAScript 言語との関連
%escape% "escape" escape 関数(B.2.1.1)
%unescape% "unescape" unescape 関数(B.2.1.2)

B.2.1.1 escape ( string )

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

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

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

呼び出されたとき、次の手順を実行します。

  1. string を ? ToString(string) に設定する。
  2. length を string の長さとする。
  3. result を空の String とする。
  4. unescapedSet を ASCII word character と "@*+-./" の文字列連結とする。
  5. k を 0 とする。
  6. k < length の間、次を繰り返す。
    1. codeUnit を string 内のインデックス k にある code unit とする。
    2. unescapedSet が codeUnit を含む場合、
      1. nextPart を codeUnit とする。
    3. そうでない場合、
      1. codeUnitNumber を codeUnit の数値とする。
      2. codeUnitNumber < 256 である場合、
        1. hex を、大文字の16進数として整形された codeUnitNumber の String 表現とする。
        2. nextPart を "%" と StringPad(hex, 2, "0", start) の文字列連結とする。
      3. そうでない場合、
        1. hex を、大文字の16進数として整形された codeUnitNumber の String 表現とする。
        2. nextPart を "%u" と StringPad(hex, 4, "0", start) の文字列連結とする。
    4. result を result と nextPart の文字列連結に設定する。
    5. k を k + 1 に設定する。
  7. result を返す。
注

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

B.2.1.2 unescape ( string )

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

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

呼び出されたとき、次の手順を実行します。

  1. string を ? ToString(string) に設定する。
  2. length を string の長さとする。
  3. result を空の String とする。
  4. k を 0 とする。
  5. k < length の間、次を繰り返す。
    1. codeUnit を string 内のインデックス k にある code unit とする。
    2. codeUnit が code unit 0x0025 (PERCENT SIGN) である場合、
      1. hexDigits を空の String とする。
      2. optionalAdvance を 0 とする。
      3. k + 5 < length であり、かつ string 内のインデックス k + 1 にある code unit が code unit 0x0075 (LATIN SMALL LETTER U) である場合、
        1. hexDigits を string の k + 2 から k + 6 までの substring に設定する。
        2. optionalAdvance を 5 に設定する。
      4. そうでなく、k + 3 ≤ length である場合、
        1. hexDigits を string の k + 1 から k + 3 までの substring に設定する。
        2. optionalAdvance を 2 に設定する。
      5. parseResult を ParseText(hexDigits, HexDigits[~Sep]) とする。
      6. parseResult が Parse Node である場合、
        1. codeUnitNumber を parseResult の MV とする。
        2. codeUnit を数値が codeUnitNumber である code unit に設定する。
        3. k を k + optionalAdvance に設定する。
    3. result を result と codeUnit の文字列連結に設定する。
    4. k を k + 1 に設定する。
  6. result を返す。

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

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

このメソッドは、this 値を String に変換した結果のsubstringを、インデックス start から開始し、length code unit 分(または length が undefined の場合は String の末尾まで)返します。start が負の場合、sourceLength を String の長さとして sourceLength + start として扱われます。結果は String オブジェクトではなく String 値です。

呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. ? RequireObjectCoercible(obj) を実行する。
  3. string を ? ToString(obj) とする。
  4. size を string の長さとする。
  5. intStart を ? ToClampedIndex(start, size) とする。
  6. length が undefined である場合、intLength を size とする。そうでない場合、intLength を ? ToIntegerOrInfinity(length) を 0 と size の間に clamp した結果とする。
  7. intEnd を min(intStart + intLength, size) とする。
  8. string の intStart から intEnd までの substring を返す。
注

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

B.2.2.2 String.prototype.anchor ( name )

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

  1. string を this 値とする。
  2. ? CreateHTML(string, "a", "name", name) を返す。

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

抽象操作 CreateHTML。引数 contents (ECMAScript 言語値)、tag (String)、attr (String) および attrValue (ECMAScript 言語値)。戻り値:(正常完了 (値:String) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. ? RequireObjectCoercible(contents) を実行する。
  2. contentsString を ? ToString(contents) とする。
  3. part1 を "<" と tag の文字列連結とする。
  4. attr が空の String でない場合、
    1. attrValueString を ? ToString(attrValue) とする。
    2. escapedAttrValue を、attrValueString 内の code unit 0x0022 (QUOTATION MARK) の各出現を6 code unit のシーケンス "&quot;" に置き換えたことを除き attrValueString と同じ String 値とする。
    3. part1 を次の文字列連結に設定する。
      • part1
      • code unit 0x0020 (SPACE)
      • attr
      • code unit 0x003D (EQUALS SIGN)
      • code unit 0x0022 (QUOTATION MARK)
      • escapedAttrValue
      • code unit 0x0022 (QUOTATION MARK)
  5. part2 を part1 と ">" の文字列連結とする。
  6. part3 を part2 と contentsString の文字列連結とする。
  7. part4 を part3、"</"、tag、および ">" の文字列連結とする。
  8. part4 を返す。

B.2.2.3 String.prototype.big ( )

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

  1. string を this 値とする。
  2. ? CreateHTML(string, "big", "", "") を返す。

B.2.2.4 String.prototype.blink ( )

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

  1. string を this 値とする。
  2. ? CreateHTML(string, "blink", "", "") を返す。

B.2.2.5 String.prototype.bold ( )

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

  1. string を this 値とする。
  2. ? CreateHTML(string, "b", "", "") を返す。

B.2.2.6 String.prototype.fixed ( )

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

  1. string を this 値とする。
  2. ? CreateHTML(string, "tt", "", "") を返す。

B.2.2.7 String.prototype.fontcolor ( colour )

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

  1. string を this 値とする。
  2. ? CreateHTML(string, "font", "color", colour) を返す。

B.2.2.8 String.prototype.fontsize ( size )

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

  1. string を this 値とする。
  2. ? CreateHTML(string, "font", "size", size) を返す。

B.2.2.9 String.prototype.italics ( )

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

  1. string を this 値とする。
  2. ? CreateHTML(string, "i", "", "") を返す。

B.2.2.10 String.prototype.link ( url )

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

  1. string を this 値とする。
  2. ? CreateHTML(string, "a", "href", url) を返す。

B.2.2.11 String.prototype.small ( )

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

  1. string を this 値とする。
  2. ? CreateHTML(string, "small", "", "") を返す。

B.2.2.12 String.prototype.strike ( )

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

  1. string を this 値とする。
  2. ? CreateHTML(string, "strike", "", "") を返す。

B.2.2.13 String.prototype.sub ( )

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

  1. string を this 値とする。
  2. ? CreateHTML(string, "sub", "", "") を返す。

B.2.2.14 String.prototype.sup ( )

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

  1. string を this 値とする。
  2. ? CreateHTML(string, "sup", "", "") を返す。

B.2.2.15 String.prototype.trimLeft ( )

注

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

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

B.2.2.16 String.prototype.trimRight ( )

注

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

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

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

B.2.3.1 Date.prototype.getYear ( )

注

getFullYear メソッドは「2000年問題」を回避するため、ほぼすべての用途で推奨されます。

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

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. tv を dateObj.[[DateValue]] とする。
  4. tv が NaN である場合、NaN を返す。
  5. 𝔽(YearFromTime(LocalTime(tv))) - 1900𝔽 を返す。

B.2.3.2 Date.prototype.setYear ( year )

注

setFullYear メソッドは「2000年問題」を回避するため、ほぼすべての用途で推奨されます。

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

  1. dateObj を this 値とする。
  2. ? RequireInternalSlot(dateObj, [[DateValue]]) を実行する。
  3. time を dateObj.[[DateValue]] とする。
  4. time が NaN である場合、time を +0𝔽 に設定する。そうでない場合、time を LocalTime(time) に設定する。
  5. fullYear を MakeFullYear(? ToNumber(year)) とする。
  6. day を MakeDay(fullYear, 𝔽(MonthFromTime(time)), 𝔽(DateFromTime(time))) とする。
  7. date を MakeDate(day, 𝔽(TimeWithinDay(time))) とする。
  8. utcTimestamp を TimeClip(UTC(date)) とする。
  9. dateObj.[[DateValue]] を utcTimestamp に設定する。
  10. utcTimestamp を返す。

B.2.3.3 Date.prototype.toGMTString ( )

注

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

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

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

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

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

  1. obj を this 値とする。
  2. ? RequireInternalSlot(obj, [[RegExpMatcher]]) を実行する。
  3. pattern が Object であり、かつ pattern が [[RegExpMatcher]] 内部スロットを持つ場合、
    1. flags が undefined でない場合、TypeError 例外をスローする。
    2. flags を pattern.[[OriginalFlags]] に設定する。
    3. pattern を pattern.[[OriginalSource]] に設定する。
  4. ? RegExpInitialize(obj, pattern, flags) を返す。
注

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

B.3 その他の追加機能

B.3.1 ラベル付き関数宣言

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

注

WithStatement、IfStatement、および IterationStatement の早期エラー規則により、これらの文が非 strict コード内でラベル付き FunctionDeclaration を含むことはできません。

B.3.2 ブロックレベル関数宣言の Web Legacy 互換性意味論

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 の宣言を含む Block の StatementList 内に存在してもよい。
    • g 内にネストされた別の関数 h 内に IdentifierReference としての f の出現が少なくとも1つあり、f のその他の宣言が h 内からの f への参照を shadow しない。
    • h のすべての呼出しは、f の宣言が評価された後に行われる。
  3. 関数が単一のブロック内で宣言され、場合によっては使用されるが、その後のブロック内からも参照される。

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

2番目および3番目の使用例について ECMAScript 2015 との相互運用性を実現するには、節 10、節 15、節 19.2.1、および節 16.1.7 の意味論に次の拡張が必要です。

ECMAScript 実装が診断警告メッセージを報告する機構を持つ場合、これらの互換性意味論が適用され、非互換性意味論から観測可能な差異が生じる FunctionDeclaration をコードが含む場合には警告を生成するべきです。たとえば、var 束縛の導入が早期エラーを引き起こすため導入されない場合、警告メッセージを生成するべきではありません。

この機能は、次の箇所で特別な意味論を伴います。

B.3.3 IfStatement の Statement 節内の FunctionDeclaration

次は 14.6 の IfStatement 生成規則を拡張します。

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 legacy 互換性意味論が含まれます。

B.3.4 Catch ブロック内の VariableStatement

この機能では、Catch 節の Block は、CatchParameter によって束縛される名前と同じ名前を束縛する var 宣言を含むことができます。これは、14.15.1 の Catch : catch ( CatchParameter ) Block に対する早期エラー規則を変更することで実現されます。

注

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

この変更された動作は、Catch 節の Block 内に含まれる direct eval 呼出しによって導入された var および function 宣言にも適用されます。この変更は、EvalDeclarationInstantiation の手順 3.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 コードを解析する場合にのみ適用されます。

引数 labelSet を持つ ContainsDuplicateLabels の静的意味論は、次によって拡張されます。

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

引数 labelSet を持つ ContainsUndefinedBreakTarget の静的意味論は、次によって拡張されます。

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

引数 iterationSet および labelSet を持つ ContainsUndefinedContinueTarget の静的意味論は、次によって拡張されます。

ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement
  1. 引数 iterationSet および « » を持つ Statement の ContainsUndefinedContinueTarget を返す。

IsDestructuring の静的意味論は、次によって拡張されます。

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

VarDeclaredNames の静的意味論は、次によって拡張されます。

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

VarScopedDeclarations の静的意味論は、次によって拡張されます。

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

引数 labelSet を持つ ForInOfLoopEvaluation の実行時意味論は、次によって拡張されます。

ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement
  1. name を BindingIdentifier の StringValue とする。
  2. lhs を ? ResolveBinding(name) とする。
  3. IsAnonymousFunctionDefinition(Initializer) が true である場合、
    1. value を、引数 name を持つ Initializer の ? NamedEvaluation とする。
  4. そうでない場合、
    1. rhs を Initializer の ? 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]] 内部スロットはホスト定義オブジェクト上に存在する場合があります。[[IsHTMLDDA]] 内部スロットを持つオブジェクトは、ToBoolean および IsLooselyEqual 抽象操作、ならびに typeof 演算子のオペランドとして使用された場合、undefined のように動作します。

注

[[IsHTMLDDA]] 内部スロットを持つオブジェクトは、この仕様によって作成されることはありません。ただし、Web ブラウザーの document.all オブジェクトは、Web 互換性のために存在する、このスロットを持つホスト定義特殊オブジェクトです。この種類のオブジェクトの既知の例は他になく、実装は document.all を除いてこのようなオブジェクトを作成するべきではありません。

この機能は、次の箇所で特別な意味論を伴います。

B.3.7 HostMakeJobCallback における既定でない動作

HostMakeJobCallback 抽象操作により、Web ブラウザーであるホストは既定でない動作を指定できます。

B.3.8 HostEnsureCanAddPrivateElement における既定でない動作

HostEnsureCanAddPrivateElement 抽象操作により、Web ブラウザーであるホストは既定でない動作を指定できます。

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

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

注

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

CallExpression : CoverCallExpressionAndAsyncArrowHead および CallExpression : CallExpression Arguments について、AssignmentTargetType の手順 1 を参照してください。