페이지 표시 설정

부속서 B (규정) 웹 브라우저를 위한 추가 ECMAScript 기능

이 부속서에서 정의하는 ECMAScript 언어 구문과 의미론은 ECMAScript 호스트가 웹 브라우저인 경우 요구됩니다. 이 부속서의 내용은 규범적이지만 ECMAScript 호스트가 웹 브라우저가 아닌 경우 선택 사항입니다.

이 부속서에서 정의하는 일부 기능은 이 부속서에 명시되어 있고 일부는 이 문서의 본문에 명시되어 있습니다.

기능이 본문에 명시된 경우 문서에서 해당 기능의 영향을 받는 각 지점은 색상 상자 안의 “Normative Optional”이라는 문구로 표시됩니다. 또한 해당 기능이 알고리즘이나 early error 규칙의 특정 문구와 관련된 경우 관련 기능을 “호스트가 지원한다”는 조건으로 보호됩니다. 웹 브라우저는 그러한 모든 기능을 지원해야 합니다.

참고

이 부속서는 웹 브라우저 ECMAScript 호스트의 다양한 레거시 기능과 그 밖의 특성을 설명합니다. 이 부속서에 지정된 모든 언어 기능과 동작은 하나 이상의 바람직하지 않은 특성을 가지며 레거시 사용이 없다면 이 명세에서 제거되었을 것입니다. 그러나 많은 기존 웹 페이지가 이러한 기능을 사용하므로 웹 브라우저는 계속 이를 지원해야 합니다. 이 부속서의 명세는 이러한 레거시 기능의 상호 운용 가능한 구현을 위한 요구 사항을 정의합니다.

이러한 기능은 핵심 ECMAScript 언어의 일부로 간주되지 않습니다. 프로그래머는 새로운 ECMAScript 코드를 작성할 때 이러한 기능과 동작을 사용하거나 존재한다고 가정해서는 안 됩니다. 구현이 웹 브라우저의 일부이거나 웹 브라우저가 접하는 동일한 레거시 ECMAScript 코드를 실행하는 데 필요하지 않은 한 ECMAScript 구현체가 이러한 기능을 구현하는 것은 권장되지 않습니다.

B.1 추가 구문

B.1.1 HTML 유사 주석

목표 기호 Module을 사용하여 소스 텍스트를 파싱할 때는 이 확장이 허용되지 않는다는 점을 제외하고 12.4의 구문과 의미론을 다음과 같이 확장합니다:

구문

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 _ 참고

동일한 좌변이 [+UnicodeMode]와 [~UnicodeMode] 가드 모두와 함께 나타나는 경우 이는 모호성 해소 우선순위를 제어하기 위한 것입니다.

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를 포함하는 단일 요소 CharSet으로 둡니다.
  3. CharacterSetMatcher(regexpRecord, charSet, false, direction)을 반환합니다.

B.1.2.8 Runtime Semantics: CompileToCharSet

인수 regexpRecord를 사용하는 CompileToCharSet의 의미론은 다음과 같이 확장됩니다:

두 규칙이 대체됩니다:

NonemptyClassRanges :: ClassAtom - ClassAtom ClassContents
  1. charSet을 인수 regexpRecord를 사용한 첫 번째 ClassAtom의 CompileToCharSet으로 둡니다.
  2. otherSet을 인수 regexpRecord를 사용한 두 번째 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이 정확히 하나의 문자를 포함하지 않거나 otherSet이 정확히 하나의 문자를 포함하지 않으면, 다음을 수행합니다.
      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를 하나 이상의 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 호스트가 웹 브라우저인 경우 표준 내장 객체의 다음 추가 프로퍼티가 정의됩니다.

B.2.1 전역 객체의 추가 프로퍼티

표 103의 항목을 표 6에 추가합니다.

표 103: 추가 잘 알려진 내재 객체
내재 이름 전역 이름 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 형식의 두 자리 이스케이프 시퀀스를 사용합니다. 숫자 값이 0x00FF보다 엄격하게 큰 코드 단위를 대체할 때는 %uxxxx 형식의 네 자리 이스케이프 시퀀스를 사용합니다.

이는 %escape% 내재 객체입니다.

호출되면 다음 단계를 수행합니다:

  1. string을 ? ToString(string)으로 설정합니다.
  2. length를 string의 길이로 둡니다.
  3. result를 빈 String으로 둡니다.
  4. unescapedSet을 ASCII word 문자와 "@*+-./"의 문자열 연결로 둡니다.
  5. k를 0으로 둡니다.
  6. k < length인 동안 다음을 반복합니다.
    1. codeUnit을 string 안에서 인덱스 k에 있는 코드 단위로 둡니다.
    2. unescapedSet이 codeUnit을 포함하면, 다음을 수행합니다.
      1. nextPart를 codeUnit으로 둡니다.
    3. 그렇지 않으면,
      1. codeUnitNumber를 codeUnit의 숫자 값으로 둡니다.
      2. codeUnitNumber < 256이면, 다음을 수행합니다.
        1. hex를 codeUnitNumber를 대문자 16진수로 형식화한 String 표현으로 둡니다.
        2. nextPart를 "%"와 StringPad(hex, 2, "0", start)의 문자열 연결로 둡니다.
      3. 그렇지 않으면,
        1. hex를 codeUnitNumber를 대문자 16진수로 형식화한 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 함수가 도입할 수 있는 종류의 각 이스케이프 시퀀스를 그것이 나타내는 코드 단위로 대체한 새로운 버전의 String 값을 계산합니다.

이는 %unescape% 내재 객체입니다.

호출되면 다음 단계를 수행합니다:

  1. string을 ? ToString(string)으로 설정합니다.
  2. length를 string의 길이로 둡니다.
  3. result를 빈 String으로 둡니다.
  4. k를 0으로 둡니다.
  5. k < length인 동안 다음을 반복합니다.
    1. codeUnit을 string 안에서 인덱스 k에 있는 코드 단위로 둡니다.
    2. codeUnit이 코드 단위 0x0025 (PERCENT SIGN)이면, 다음을 수행합니다.
      1. hexDigits를 빈 String으로 둡니다.
      2. optionalAdvance를 0으로 둡니다.
      3. k + 5 < length이고 string 안에서 인덱스 k + 1에 있는 코드 단위가 코드 단위 0x0075 (LATIN SMALL LETTER U)이면, 다음을 수행합니다.
        1. hexDigits를 string의 k + 2부터 k + 6까지의 부분 문자열로 설정합니다.
        2. optionalAdvance를 5로 설정합니다.
      4. 그렇지 않고 k + 3 ≤ length이면, 다음을 수행합니다.
        1. hexDigits를 string의 k + 1부터 k + 3까지의 부분 문자열로 설정합니다.
        2. optionalAdvance를 2로 설정합니다.
      5. parseResult를 ParseText(hexDigits, HexDigits[~Sep])로 둡니다.
      6. parseResult가 Parse Node이면, 다음을 수행합니다.
        1. codeUnitNumber를 parseResult의 MV로 둡니다.
        2. codeUnit을 숫자 값이 codeUnitNumber인 코드 단위로 설정합니다.
        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으로 변환한 결과의 부분 문자열을 반환하며, 인덱스 start에서 시작하여 length개의 코드 단위만큼 계속됩니다(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까지의 부분 문자열을 반환합니다.
참고

이 메서드는 의도적으로 일반적이며 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과 같지만 attrValueString 안의 코드 단위 0x0022 (QUOTATION MARK)의 각 발생을 여섯 코드 단위 시퀀스 "&quot;"로 대체한 String 값으로 둡니다.
    3. part1을 다음의 문자열 연결로 설정합니다:
      • part1
      • 코드 단위 0x0020 (SPACE)
      • attr
      • 코드 단위 0x003D (EQUALS SIGN)
      • 코드 단위 0x0022 (QUOTATION MARK)
      • escapedAttrValue
      • 코드 단위 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은 비엄격 코드에서 허용되는 확장이었으며 대부분의 브라우저 호스팅 ECMAScript 구현체가 이 확장을 지원했습니다. ECMAScript 2015 이후에는 LabelledStatement의 문법 생성물이 FunctionDeclaration을 LabelledItem으로 사용하는 것을 허용하지만 14.13.1에는 그러한 경우 Syntax Error를 발생시키는 Early Error 규칙이 포함되어 있습니다. 이후 호스트가 이 기능을 지원한다면 비엄격 코드에서 Syntax Error를 억제하도록 해당 규칙을 수정합니다.

참고

WithStatement, IfStatement, IterationStatement에 대한 early error 규칙은 비엄격 코드에서 이러한 문이 레이블이 지정된 FunctionDeclaration을 포함하지 못하도록 합니다.

B.3.2 블록 수준 함수 선언의 웹 레거시 호환성 의미론

ECMAScript 2015 이전에는 ECMAScript 명세에서 Block 문의 StatementList 요소로 FunctionDeclaration이 나타나는 것을 정의하지 않았습니다. 그러나 이러한 형태의 FunctionDeclaration 지원은 허용되는 확장이었으며 대부분의 브라우저 호스팅 ECMAScript 구현체가 이를 허용했습니다. 불행히도 그러한 선언의 의미론은 구현체마다 다릅니다. 이러한 의미론적 차이 때문에 Block 수준 함수 선언을 사용하는 기존 웹 ECMAScript 소스 텍스트는 그 사용이 해당 선언에 대한 모든 브라우저 구현체의 의미론적 교집합에만 의존하는 경우에만 브라우저 구현체 사이에서 이식 가능합니다. 다음은 그 교집합 의미론에 속하는 사용 사례입니다:

  1. 함수가 선언되고 하나의 블록 안에서만 참조됩니다.

  2. 함수가 하나의 Block 안에서 선언되고 사용될 수 있지만 동일한 Block 안에 포함되지 않은 내부 함수 정의에서도 참조됩니다.

    • BindingIdentifier가 이름 f인 하나 이상의 FunctionDeclaration이 둘러싸는 함수 g의 함수 코드 안에 나타나며 해당 선언은 Block 안에 중첩되어 있습니다.
    • var 선언이 아닌 f의 다른 선언은 g의 함수 코드 안에 나타나지 않습니다.
    • f 선언을 포함하는 Block의 StatementList 안에 IdentifierReference로서 f의 발생이 있을 수 있습니다.
    • g 안에 중첩된 다른 함수 h 안에 IdentifierReference로서 f가 적어도 한 번 나타나며, 다른 f 선언이 h 내부에서 f에 대한 참조를 가리지 않습니다.
    • h의 모든 호출은 f 선언이 평가된 후에 발생합니다.
  3. 함수가 하나의 블록 안에서 선언되고 사용될 수 있지만 이후 블록에서도 참조됩니다.

첫 번째 사용 사례는 ECMAScript 2015가 제공하는 Block 수준 함수 선언의 의미론과 상호 운용됩니다. 이 사용 사례를 사용하는 기존 ECMAScript 소스 텍스트는 10, 14, 15 절에 정의된 블록 수준 함수 선언 의미론을 사용하여 동작합니다.

두 번째와 세 번째 사용 사례의 ECMAScript 2015 상호 운용성에는 10 절, 15 절, 19.2.1 절, 16.1.7 절의 의미론에 다음 확장이 필요합니다.

ECMAScript 구현체에 진단 경고 메시지를 보고하는 메커니즘이 있다면, 이러한 호환성 의미론이 적용되는 FunctionDeclaration을 코드가 포함하고 비호환성 의미론과 관찰 가능한 차이를 도입할 때 경고를 생성해야 합니다. 예를 들어 var 바인딩 도입이 early error를 생성하기 때문에 도입되지 않는 경우에는 경고 메시지를 생성해서는 안 됩니다.

이 기능은 다음 지점에서 특별한 의미론을 포함합니다:

B.3.3 IfStatement 문 절의 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]

이 생성물은 비엄격 코드를 파싱할 때만 적용됩니다. 이 생성물과 일치하는 소스 텍스트는 일치하는 각 FunctionDeclaration[?Yield, ?Await, ~Default] 발생이 소스 텍스트의 해당 위치를 차지하는 BlockStatement의 유일한 StatementListItem인 것처럼 처리됩니다. 그러한 합성 BlockStatement의 의미론에는 B.3.2에 지정된 웹 레거시 호환성 의미론이 포함됩니다.

B.3.4 Catch 블록의 VariableStatement

이 기능에서 Catch 절의 Block은 CatchParameter에서도 바인딩되는 이름을 바인딩하는 var 선언을 포함할 수 있습니다. 이는 14.15.1의 Catch : catch ( CatchParameter ) Block 에 대한 early error 규칙을 수정하여 달성됩니다.

참고

런타임에서 그러한 바인딩은 VariableDeclarationEnvironment에 인스턴스화됩니다. 동일한 이름의 CatchParameter가 도입한 바인딩을 가리지 않으므로 그러한 var 선언의 Initializer는 var 바인딩이 아니라 대응하는 catch 매개변수에 할당합니다.

이 수정된 동작은 Catch 절의 Block 안에 포함된 직접 eval 호출이 도입하는 var 및 function 선언에도 적용됩니다. 이 변경은 EvalDeclarationInstantiation의 3.d.i.2.a.i 및 13.b.ii.4.a.i.i 단계를 수정하여 달성됩니다.

B.3.5 ForIn 문 헤드의 이니셜라이저

다음은 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]

이 생성물은 비엄격 코드를 파싱할 때만 적용됩니다.

인수 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]] 내부 슬롯을 갖는 객체는 이 명세에서 절대 생성하지 않습니다. 그러나 웹 브라우저의 document.all 객체는 웹 호환성을 위해 존재하는 이 슬롯을 갖는 호스트 정의 특수 객체입니다. 이러한 타입의 객체에 대한 다른 알려진 예는 없으며 구현체는 document.all을 제외하고 어떤 객체도 이러한 슬롯과 함께 생성해서는 안 됩니다.

이 기능은 다음 지점에서 특별한 의미론을 포함합니다:

B.3.7 HostMakeJobCallback의 비기본 동작

HostMakeJobCallback 추상 연산은 웹 브라우저인 호스트가 비기본 동작을 지정할 수 있도록 합니다.

B.3.8 HostEnsureCanAddPrivateElement의 비기본 동작

HostEnsureCanAddPrivateElement 추상 연산은 웹 브라우저인 호스트가 비기본 동작을 지정할 수 있도록 합니다.

B.3.9 함수 호출 할당 대상의 런타임 오류

함수 호출(13.3.6)이 비엄격 코드에서 할당 대상으로 사용되면 early error를 생성하는 대신 할당 평가 중 ReferenceError 예외를 던집니다.

참고

할당 대상이 AssignmentExpression의 LeftHandSideExpression인 경우 할당 연산자는 = 또는 AssignmentOperator여야 합니다. 특히 여기의 허용 사항은 논리 할당 연산자(??=, &&=, ||=)에는 적용되지 않습니다.

CallExpression : CoverCallExpressionAndAsyncArrowHead 및 CallExpression : CallExpression Arguments 에 대한 AssignmentTargetType의 1 단계를 참조하시기 바랍니다.