?
u
m
/
p
1-9
0
`
본 절,
read-modify-write 수정 함수란 두 개의 바이트 값
read-modify-write 수정 함수의 알고리즘 단계가 순수한 수학적 함수임을 검증하는 데 도움을 주기 위해 다음 편집 지침을 권장한다:
fixed-length ArrayBuffer 는 생성 후 바이트 길이가 변하지 않는 ArrayBuffer 이다.
resizable ArrayBuffer 는
어떤 종류의 ArrayBuffer 객체가 생성되는지는
The abstract operation AllocateArrayBuffer takes arguments constructor (a constructor) and byteLength (a non-negative
The abstract operation ArrayBufferByteLength takes arguments arrayBuffer (an ArrayBuffer or SharedArrayBuffer) and order (
The abstract operation ArrayBufferCopyAndDetach takes arguments arrayBuffer (an ECMAScript language value), newLength (an ECMAScript language value), and preserveResizability (
realloc
으로 최적화할 수 있다.The abstract operation IsDetachedBuffer takes argument arrayBuffer (an ArrayBuffer or a SharedArrayBuffer) and returns Boolean. It performs the following steps when called:
The abstract operation DetachArrayBuffer takes argument arrayBuffer (an ArrayBuffer) and optional argument key (anything) and returns
ArrayBuffer 인스턴스를 분리(detach)하면 그 인스턴스가 사용하던
The abstract operation CloneArrayBuffer takes arguments srcBuffer (an ArrayBuffer or a SharedArrayBuffer), srcByteOffset (a non-negative
The abstract operation GetArrayBufferMaxByteLengthOption takes argument options (an ECMAScript language value) and returns 음이 아닌 정수 또는
The host-defined abstract operation HostResizeArrayBuffer takes arguments buffer (an ArrayBuffer) and newByteLength (a non-negative
HostResizeArrayBuffer 구현은 다음 요구사항을 준수해야 한다:
기본 구현은
The abstract operation IsFixedLengthArrayBuffer takes argument arrayBuffer (an ArrayBuffer or a SharedArrayBuffer) and returns Boolean. It performs the following steps when called:
The abstract operation IsUnsignedElementType takes argument type (a
The abstract operation IsUnclampedIntegerElementType takes argument type (a
The abstract operation IsBigIntElementType takes argument type (a
The abstract operation IsNoTearConfiguration takes arguments type (a
The abstract operation RawBytesToNumeric takes arguments type (a
The abstract operation GetRawBytesFromSharedBlock takes arguments block (a
The abstract operation GetValueFromBuffer takes arguments arrayBuffer (an ArrayBuffer or SharedArrayBuffer), byteIndex (a non-negative
The abstract operation NumericToRawBytes takes arguments type (a
The abstract operation SetValueInBuffer takes arguments arrayBuffer (an ArrayBuffer or SharedArrayBuffer), byteIndex (a non-negative
The abstract operation GetModifySetValueInBuffer takes arguments arrayBuffer (an ArrayBuffer or a SharedArrayBuffer), byteIndex (a non-negative
ArrayBuffer
extends
절의 값으로 사용할 수 있다. 지정된 ArrayBuffer 동작을 상속하려면 서브클래스 ArrayBuffer.prototype
내장 메서드 지원에 필요한 내부 상태로 서브클래스 인스턴스를 생성·초기화하기 위해 ArrayBuffer super
호출을 포함해야 한다.이 함수는 호출 시 다음 단계를 수행한다:
ArrayBuffer
이 함수는 호출 시 다음 단계를 수행한다:
ArrayBuffer.prototype
의 초기 값은
이 프로퍼티 특성은 { [[Writable]]:
ArrayBuffer[%Symbol.species%]
는 set 접근자 함수가
이 함수의
ArrayBuffer 프로토타입 객체:
ArrayBuffer.prototype.byteLength
는 set 접근자 함수가
ArrayBuffer.prototype.constructor
의 초기 값은
ArrayBuffer.prototype.detached
는 set 접근자 함수가
ArrayBuffer.prototype.maxByteLength
는 set 접근자 함수가
ArrayBuffer.prototype.resizable
는 set 접근자 함수가
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 프로퍼티 특성은 { [[Writable]]:
ArrayBuffer 인스턴스는
[[ArrayBufferData]] 가
[[ArrayBufferDetachKey]] 가
다음은 크기 변경 가능 ArrayBuffer 를 사용하는 ECMAScript 프로그래머를 위한 지침이다.
가능하다면 배포 환경에서 프로그램을 테스트하는 것을 권장한다. 사용 가능한 물리 메모리 양은 하드웨어 장치마다 크게 다르다. 유사하게 가상 메모리 서브시스템 역시 하드웨어 및 운영체제에 따라 크게 다르다. 64비트 데스크톱 웹 브라우저에서 메모리 부족 없이 동작하는 애플리케이션이 32비트 모바일 웹 브라우저에서는 메모리를 소진할 수 있다.
크기 변경 가능 ArrayBuffer 의
특정 최대 크기에 대해 크기 변경 가능 ArrayBuffer 를 성공적으로 생성했다 해서 이후 모든 크기 변경이 성공함을 보장하지 않는다.
다음은 크기 변경 가능 ArrayBuffer 를 구현하는 ECMAScript 구현자들을 위한 지침이다.
fixed-length SharedArrayBuffer 는 생성 후 바이트 길이가 변경될 수 없는 SharedArrayBuffer 이다.
growable SharedArrayBuffer 는
생성되는 SharedArrayBuffer 객체의 종류는
The abstract operation AllocateSharedArrayBuffer takes arguments constructor (a constructor) and byteLength (a non-negative
The abstract operation IsSharedArrayBuffer takes argument obj (an ArrayBuffer or a SharedArrayBuffer) and returns Boolean. 객체가 ArrayBuffer, SharedArrayBuffer, 또는 그 서브타입인지 검사한다. It performs the following steps when called:
The host-defined abstract operation HostGrowSharedArrayBuffer takes arguments buffer (a SharedArrayBuffer) and newByteLength (a non-negative
HostGrowSharedArrayBuffer 구현은 다음 요구사항을 따른다:
SharedArrayBuffer.prototype.grow
에 대한 경합 호출이 “소실”(조용히 아무 것도 하지 않음)되지 않도록 한다.두 번째 요구사항은 buffer 의 현재 바이트 길이를 언제/어떻게 읽는지에 대해 의도적으로 모호하다. 길이 갱신은 하드웨어의 원자적 read-modify-write 명령을 통해 이루어져야 하므로 load-link/store-conditional 또는 load-exclusive/store-exclusive 쌍을 사용하는 구조에서는 명령을 가깝게 유지하고 싶을 수 있다. 따라서 SharedArrayBuffer.prototype.grow 자체는 HostGrowSharedArrayBuffer 호출 전 newByteLength 에 대한 경계 검사를 수행하지 않으며, 현재 바이트 길이를 언제 읽어야 한다는 요구도 없다.
이는 newByteLength 가 0 이상이며 buffer.[[ArrayBufferMaxByteLength]] 이하임이 보장되는
기본 구현은
SharedArrayBuffer
extends
절의 값으로 사용할 수 있다. 지정된 SharedArrayBuffer 동작을 상속하려는 서브클래스 SharedArrayBuffer.prototype
내장 메서드 동작을 지원하는 데 필요한 내부 상태로 서브클래스 인스턴스를 생성·초기화하기 위해 SharedArrayBuffer super
호출을 포함해야 한다.ArrayBuffer
와 달리 SharedArrayBuffer
는 분리(detach)되지 않으며 그 내부 [[ArrayBufferData]] 슬롯은
이 함수는 호출 시 다음 단계를 수행한다:
SharedArrayBuffer
SharedArrayBuffer.prototype
의 초기 값은
이 프로퍼티 특성은 { [[Writable]]:
SharedArrayBuffer[%Symbol.species%]
는 set 접근자 함수가
이 함수의
SharedArrayBuffer 프로토타입 객체:
SharedArrayBuffer.prototype.byteLength
는 set 접근자 함수가
SharedArrayBuffer.prototype.constructor
의 초기 값은
이 메서드는 호출 시 다음 단계를 수행한다:
길이 갱신 compare-exchange 의 허위 실패는 금지된다. 새 길이에 대한 경계 검사 통과 및 메모리 부족이 아니면 항상
SharedArrayBuffer.prototype.grow 에 대한 병렬 호출은 완전 순서화된다. 예를 들어 sab.grow(10)
과 sab.grow(20)
이 경합할 때 둘 중 하나가 승리하며, sab.grow(20)
이 먼저 일어났다면 sab.grow(10)
호출은 버퍼를 축소하지 않고 대신 RangeError 를 던진다.
SharedArrayBuffer.prototype.growable
는 set 접근자 함수가
SharedArrayBuffer.prototype.maxByteLength
는 set 접근자 함수가
이 메서드는 호출 시 다음 단계를 수행한다:
이 프로퍼티 특성은 { [[Writable]]:
SharedArrayBuffer 인스턴스는
SharedArrayBuffer 인스턴스는 ArrayBuffer 인스턴스와 달리 분리(detach)되지 않는다.
다음은 증가 가능 SharedArrayBuffer 를 사용하는 ECMAScript 프로그래머를 위한 지침이다.
가능하다면 배포 환경에서 프로그램을 테스트할 것을 권장한다. 사용 가능한 물리 메모리 양은 하드웨어 장치마다 크게 다르다. 가상 메모리 서브시스템 또한 하드웨어와 운영체제에 따라 매우 다르다. 64비트 데스크톱 웹 브라우저에서 메모리 부족 없이 실행되는 애플리케이션이 32비트 모바일 웹 브라우저에서는 메모리를 소진할 수 있다.
증가 가능 SharedArrayBuffer 의
특정 최대 크기로 증가 가능 SharedArrayBuffer 를 성공적으로 생성했더라도 향후 grow 가 항상 성공함을 보장하지 않는다.
증가 가능 SharedArrayBuffer 의 길이(load) 중 모두가 동기화 u8[idx]
)으로 수행되는 길이 load 는 동기화되지 않는다. 일반적으로 명시적 동기화가 없으면 한 프로퍼티 접근이 경계 내라는 사실이 같은 에이전트의 이후 접근도 경계 내임을 의미하지 않는다. 반면 SharedArrayBuffer 의 length
, byteLength
게터,
다음은 증가 가능 SharedArrayBuffer 를 구현하는 ECMAScript 구현자를 위한 지침이다.
증가 가능 SharedArrayBuffer 는 가상 메모리를 미리 예약한 제자리 증가 방식으로 구현할 것을 권장한다.
grow 연산은 증가 가능 SharedArrayBuffer 에 대한 메모리 접근과 병렬로 일어날 수 있으므로, 메모리 모델 제약은 unordered 접근조차 ‘찢어짐(tearing)’이 없어야 함을 요구한다. 실제로 이는 기반 데이터 블록을 ‘세계 정지’ 없이 복사로 증가시킬 수 없음을 의미한다. 직렬화 지점을 만들고 느리기 때문에 ‘세계 정지’ 전략은 권장되지 않는다.
증가된 메모리는 생성 순간부터(경합 접근 포함) 0 으로 보이는 형태여야 한다. 이는 온디맨드 zero-filled 가상 메모리 페이지나 수동 초기화 시 주의 깊은 동기화로 달성할 수 있다.
증가 가능 SharedArrayBuffer 의
가상 메모리가 없는(예: MMU 없는 임베디드 장치)
DataView With Buffer Witness Record 는 DataView 와, 뷰 대상 버퍼의 캐시된 바이트 길이를 함께 캡슐화하기 위해 사용되는
DataView With Buffer Witness Record 는
필드 이름 | 값 | 의미 |
---|---|---|
[[Object]] | a DataView | 버퍼의 바이트 길이를 로드한 해당 DataView 객체. |
[[CachedBufferByteLength]] |
a non-negative |
|
The abstract operation MakeDataViewWithBufferWitnessRecord takes arguments obj (a DataView) and order (
The abstract operation GetViewByteLength takes argument viewRecord (a
The abstract operation IsViewOutOfBounds takes argument viewRecord (a
The abstract operation GetViewValue takes arguments view (an ECMAScript language value), requestIndex (an ECMAScript language value), isLittleEndian (an ECMAScript language value), and type (a
The abstract operation SetViewValue takes arguments view (an ECMAScript language value), requestIndex (an ECMAScript language value), isLittleEndian (an ECMAScript language value), type (a
DataView
extends
절 값으로 사용할 수 있다. 지정된 DataView 동작을 상속하려는 서브클래스 DataView.prototype
내장 메서드 지원에 필요한 내부 상태로 서브클래스 인스턴스를 생성·초기화하기 위해 DataView super
호출을 포함해야 한다.이 함수는 호출 시 다음 단계를 수행한다:
DataView
DataView.prototype
의 초기 값은
이 프로퍼티 특성은 { [[Writable]]:
DataView 프로토타입 객체:
DataView.prototype.buffer
는 set 접근자 함수가
DataView.prototype.byteLength
는 set 접근자 함수가
DataView.prototype.byteOffset
는 set 접근자 함수가
DataView.prototype.constructor
의 초기 값은
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 메서드는 호출 시 다음 단계를 수행한다:
이 프로퍼티 특성은 { [[Writable]]:
DataView 인스턴스는
[[DataView]] 내부 슬롯의 값 자체는 명세 내에서 사용되지 않는다. 이 내부 슬롯의 존재 여부가 해당 객체가 DataView
Atomics 객체:
new
연산자로 Atomics 객체는 공유 메모리 배열 셀에 대해 분리 불가능(원자적)하게 동작하는 함수들과 에이전트가 원시적 이벤트를 대기/디스패치할 수 있게 하는 함수들을 제공한다. 규범적으로 사용하면 Atomics 함수는 공유 메모리를 통해 통신하는 다중 에이전트 프로그램이 병렬 CPU 상에서도 잘 이해된 순서로 실행되도록 한다. 공유 메모리 통신을 지배하는 규칙은 아래에 정의된 메모리 모델이 제공한다.
ECMAScript 에서 공유 메모리를 프로그래밍/구현하기 위한 비규범적 가이드라인은 메모리 모델 절 끝부분의 주석을 참고하라.
Waiter Record 는 특정 Atomics.wait
또는 Atomics.waitAsync
호출을 나타내기 위해 사용되는
Waiter Record 는
필드 이름 | 값 | 의미 |
---|---|---|
[[AgentSignifier]] |
|
Atomics.wait 또는 Atomics.waitAsync 를 호출한 에이전트.
|
[[PromiseCapability]] |
|
Atomics.waitAsync 호출을 나타내면 결과 promise, 아니면 |
[[TimeoutTime]] |
음이 아닌 |
타임아웃이 트리거될 수 있는 가장 이른 시각; |
[[Result]] |
|
호출의 반환 값. |
WaiterList Record 는 Atomics.wait
, Atomics.waitAsync
, Atomics.notify
를 통한 에이전트 대기 및 알림을 설명하는 데 사용된다.
WaiterList Record 는
필드 이름 | 값 | 의미 |
---|---|---|
[[Waiters]] |
|
이 WaiterList 가 연관된 위치에서 대기 중인 Atomics.wait / Atomics.waitAsync 호출들.
|
[[MostRecentLeaveEvent]] |
|
가장 최근 임계 구역 이탈 이벤트, 또는 한번도 진입한 적 없으면 |
같은
에이전트 클러스터는 WaiterList Record 의 저장소를 가진다; 저장소는 (block, i) 로 인덱싱되고 block 은
각 WaiterList Record 는 평가 중 그 WaiterList Record 에 대한 배타적 접근을 제어하는 critical section 을 가진다. 한 번에 하나의 에이전트만 critical section 에 진입할 수 있다. 진입/이탈은 추상 연산
The abstract operation ValidateIntegerTypedArray takes arguments typedArray (an ECMAScript language value) and waitable (a Boolean) and returns 정상 완료(
The abstract operation ValidateAtomicAccess takes arguments taRecord (a
The abstract operation ValidateAtomicAccessOnIntegerTypedArray takes arguments typedArray (an ECMAScript language value) and requestIndex (an ECMAScript language value) and returns 정상 완료(정수) 또는
The abstract operation RevalidateAtomicAccess takes arguments typedArray (a
The abstract operation GetWaiterList takes arguments block (a
The abstract operation EnterCriticalSection takes argument WL (a
EnterCriticalSection 은 에이전트가 다른 에이전트가 떠나기를 기다려야 할 때 경합(contention) 이 있다. 경합이 없을 때 EnterCriticalSection 호출의 FIFO 순서가 관측 가능하다. 경합이 있을 때 구현은 임의 순서를 선택할 수 있으나 무기한 대기는 유발할 수 없다.
The abstract operation LeaveCriticalSection takes argument WL (a
The abstract operation AddWaiter takes arguments WL (a
The abstract operation RemoveWaiter takes arguments WL (a
The abstract operation RemoveWaiters takes arguments WL (a
The abstract operation SuspendThisAgent takes arguments WL (a
Atomics.notify
) 를 호출하여 깨어날 수 있다.The abstract operation NotifyWaiter takes arguments WL (a
에이전트는
The abstract operation EnqueueResolveInAgentJob takes arguments agentSignifier (an
The abstract operation DoWait takes arguments mode (
additionalTimeout 은 전력 소비 감소나 타이밍 공격 완화를 위한 타이머 해상도 조정 등 필요 시 타임아웃에 패딩을 허용한다. 호출마다 값이 다를 수 있다.
The abstract operation EnqueueAtomicsWaitAsyncTimeoutJob takes arguments WL (a
The abstract operation AtomicCompareExchangeInSharedBlock takes arguments block (a
The abstract operation AtomicReadModifyWrite takes arguments typedArray (an ECMAScript language value), index (an ECMAScript language value), value (an ECMAScript language value), and op (a read-modify-write modification function) and returns 정상 완료(Number 또는 BigInt) 또는
The abstract operation ByteListBitwiseOp takes arguments op (&
, ^
, or |
), xBytes (a
The abstract operation ByteListEqual takes arguments xBytes (a
이 함수는 호출 시 다음 단계를 수행한다:
이 함수는 호출 시 다음 단계를 수행한다:
&
, xBytes, yBytes).이 함수는 호출 시 다음 단계를 수행한다:
이 함수는 호출 시 다음 단계를 수행한다:
이 함수는 호출 시 다음 단계를 수행한다:
이 함수는 최적화용 프리미티브이다. 크기 n 바이트 데이터에 대한 atomic primitive (compareExchange
, load
, store
, add
, sub
, and
, or
, xor
, exchange
) 의 원자 단계가 주변 에이전트가 데이터 범위를 넘어서는 lock 을 획득하지 않고 수행된다면 Atomics.isLockFree
(n) 은
Atomics.isLockFree
(4) 는 관련 하드웨어 모두에서 지원 가능하므로 항상
이 함수 반환값과 무관하게 모든 원자 연산은 원자성이 보장된다. 즉 중간 연산(예: “tearing”)이 관측되지 않는다.
이 함수는 호출 시 다음 단계를 수행한다:
이 함수는 호출 시 다음 단계를 수행한다:
|
, xBytes, yBytes).이 함수는 호출 시 다음 단계를 수행한다:
이 함수는 호출 시 다음 단계를 수행한다:
이 함수는 주변 에이전트를 대기 큐에 두고 알림 또는 타임아웃까지 일시중단하며 결과 구분 문자열을 반환한다.
호출 시 다음 단계를 수행한다:
이 함수는 호출 에이전트가 알림을 받거나 타임아웃에 도달했을 때 resolve 되는 Promise 를 반환한다.
호출 시 다음 단계를 수행한다:
이 함수는 대기 큐에서 잠자고 있는 일부 에이전트를 깨운다.
호출 시 다음 단계를 수행한다:
이 함수는 호출 시 다음 단계를 수행한다:
^
, xBytes, yBytes).이 프로퍼티 특성은 { [[Writable]]:
JSON 객체:
parse
와 stringify
두 함수 포함.new
JSON 데이터 교환 형식은 ECMA-404 에 정의된다. 본 명세에서 사용하는 JSON 교환 형식은 ECMA-404 에 기술된 것과 정확히 동일하다. JSON.parse
및 JSON.stringify
의 적합 구현은 ECMA-404 명세에 기술된 교환 형식을 삭제나 확장 없이 정확히 지원해야 한다.
이 함수는 JSON 텍스트(JSON 형식 문자열)를 파싱하여
선택적 reviver 매개변수는 key, value 두 매개변수를 받는 함수로 결과를 필터/변환할 수 있다. 파싱에서 생성된 각 key/value 쌍에 대해 호출되며 반환값이 원래 값 대신 사용된다. 받은 값을 그대로 반환하면 구조는 수정되지 않는다.
이 함수의
The abstract operation ParseJSON takes argument text (a String) and returns 정상 완료(
적합한 JSON.parse
구현은 JSON 문법을 확장할 수 없다. 수정/확장된 JSON 교환 형식을 지원하려면 다른 parse 함수를 정의해야 한다.
유효 JSON 텍스트는 ECMAScript
그러나
객체 내 이름 문자열이 중복될 경우 동일 키의 앞선 값들은 덮어써진다.
The abstract operation InternalizeJSONProperty takes arguments holder (an Object), name (a String), and reviver (a function object) and returns 정상 완료(
이 알고리즘은 [[Delete]] 또는
호출 시 다음 단계를 수행한다:
이 함수는
호출 시 다음 단계를 수행한다:
이 함수의
JSON 구조는 임의 깊이로 중첩 가능하지만 비순환이어야 한다. value 가 순환 구조이면
a = [];
a[0] = a;
my_text = JSON.stringify(a); // 여기서는 TypeError 가 발생해야 함.
기호적(심볼이 아님) 기본 값들은 다음과 같이 표현된다:
문자열 값은 QUOTATION MARK ("
) 코드 유닛으로 둘러싸인다. 코드 유닛 "
및 \
는 \
접두로 이스케이프. 제어 문자 코드 유닛은 \u
HHHH 또는 더 짧은 \b
, \f
, \n
, \r
, \t
로 대체.
JSON 표현이 없는 값(
객체는 U+007B 후 0개 이상 프로퍼티 (U+002C 로 구분), U+007D 로 닫힘. 프로퍼티는 따옴표로 둘러싼 이름, U+003A, 문자열화된 값. 배열은 U+005B 후 값들(콤마 구분), U+005D 로 닫힘.
JSON Serialization Record 는 JSON 형식 직렬화를 가능하게 하는
JSON Serialization Record 는
필드 이름 | 값 | 의미 |
---|---|---|
[[ReplacerFunction]] | 객체 프로퍼티 대체 값을 제공 (JSON.stringify 의 replacer). | |
[[PropertyList]] | 문자열 |
비배열 객체 직렬화 시 포함할 |
[[Gap]] | String | 들여쓰기 단위 (space). |
[[Stack]] | Object |
직렬화 진행 중 중첩 객체 집합 (순환 감지). |
[[Indent]] | String | 현재 들여쓰기. |
The abstract operation SerializeJSONProperty takes arguments state (a
The abstract operation QuoteJSONString takes argument value (a String) and returns String. value 를 0x0022 (QUOTATION MARK) 코드 유닛으로 감싸고 특정 코드 유닛을 이스케이프한다. 이 연산은
Code Point | 유니코드 이름 | Escape Sequence |
---|---|---|
U+0008 | BACKSPACE |
\b
|
U+0009 | CHARACTER TABULATION |
\t
|
U+000A | LINE FEED (LF) |
\n
|
U+000C | FORM FEED (FF) |
\f
|
U+000D | CARRIAGE RETURN (CR) |
\r
|
U+0022 | QUOTATION MARK |
\"
|
U+005C | REVERSE SOLIDUS |
\\
|
The abstract operation UnicodeEscape takes argument C (a code unit) and returns String. C 를 유니코드 이스케이프 시퀀스로 표현한다. It performs the following steps when called:
The abstract operation SerializeJSONObject takes arguments state (a
The abstract operation SerializeJSONArray takes arguments state (a
배열 표현은 array.length
미만 인덱스 요소만 포함한다.
이 프로퍼티 특성은 { [[Writable]]: