?um/p1-90`이 절,
read-modify-write 수정 함수는 바이트 값의 두
read-modify-write 수정 함수의 알고리즘 단계들이 순수한 수학적 함수를 구성하는지 검증하는 데 도움을 주기 위해, 다음 편집상 규약이 권장된다:
고정 길이 ArrayBuffer는 생성 후 바이트 길이가 변경될 수 없는 ArrayBuffer이다.
크기 조절 가능 ArrayBuffer는 생성 후
생성되는 ArrayBuffer 객체의 종류는
The abstract operation AllocateArrayBuffer takes arguments constructor (a
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 a Boolean. It performs the following steps when called:
The abstract operation DetachArrayBuffer takes argument arrayBuffer (an ArrayBuffer) and optional argument key (anything) and returns either a
ArrayBuffer 인스턴스를 detach하면 그 backing store로 사용된
The abstract operation CloneArrayBuffer takes arguments srcBuffer (an ArrayBuffer or a SharedArrayBuffer), srcByteOffset (a non-negative integer), and srcLength (a non-negative integer) and returns either a
The abstract operation GetArrayBufferMaxByteLengthOption takes argument options (an ECMAScript language value) and returns either a
The host-defined abstract operation HostResizeArrayBuffer takes arguments buffer (an ArrayBuffer) and newByteLength (a non-negative integer) and returns either a
HostResizeArrayBuffer의 구현은 다음 요구사항을 준수해야 한다:
HostResizeArrayBuffer의 기본 구현은
The abstract operation IsFixedLengthArrayBuffer takes argument arrayBuffer (an ArrayBuffer or a SharedArrayBuffer) and returns a 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 integer), type (a
The abstract operation NumericToRawBytes takes arguments type (a
The abstract operation SetValueInBuffer takes arguments arrayBuffer (an ArrayBuffer or SharedArrayBuffer), byteIndex (a non-negative integer), type (a
The abstract operation GetModifySetValueInBuffer takes arguments arrayBuffer (an ArrayBuffer or a SharedArrayBuffer), byteIndex (a non-negative integer), type (a
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]]가
다음은
가능한 경우 프로그램은 배포 환경에서 테스트할 것을 권장한다. 사용 가능한 물리 메모리의 양은 하드웨어 장치마다 크게 다르다. 마찬가지로 가상 메모리 서브시스템도 하드웨어 장치와 운영 체제마다 크게 다르다. 64비트 데스크톱 웹 브라우저에서 메모리 부족 오류 없이 실행되는 애플리케이션이 32비트 모바일 웹 브라우저에서는 메모리가 부족해질 수 있다.
특정 최대 크기에 대해
다음은
웹 브라우저와 같이
임베디드 장치처럼 MMU가 없는 환경에서 실행되는
고정 길이 SharedArrayBuffer는 생성 후 바이트 길이가 변경될 수 없는 SharedArrayBuffer이다.
증가 가능 SharedArrayBuffer는 생성 후
생성되는 SharedArrayBuffer 객체의 종류는
The abstract operation AllocateSharedArrayBuffer takes arguments constructor (a
The abstract operation IsSharedArrayBuffer takes argument obj (an ArrayBuffer or a SharedArrayBuffer) and returns a Boolean. 객체가 SharedArrayBuffer인지 테스트한다. It performs the following steps when called:
The abstract operation IsGrowableSharedArrayBuffer takes argument obj (an ArrayBuffer or a SharedArrayBuffer) and returns a Boolean. 객체가
The host-defined abstract operation HostGrowSharedArrayBuffer takes arguments buffer (a SharedArrayBuffer) and newByteLength (a non-negative integer) and returns either a
HostGrowSharedArrayBuffer의 구현은 다음 요구사항을 준수해야 한다:
위 두 번째 요구사항은 buffer의 현재 바이트 길이를 어떻게 또는 언제 읽는지에 대해 의도적으로 모호하다. 바이트 길이는 기반 하드웨어에서 원자적 read-modify-write 연산을 통해 갱신되어야 하므로, load-link/store-conditional 또는 load-exclusive/store-exclusive 명령 쌍을 사용하는 아키텍처는 쌍을 이루는 명령들을 명령 스트림에서 가깝게 유지하고자 할 수 있다. 따라서
이는 0 ≤ newByteLength ≤ buffer.[[ArrayBufferMaxByteLength]]가 보장되는
HostGrowSharedArrayBuffer의 기본 구현은
SharedArrayBuffer 생성자는:
extends 절의 값으로 사용될 수 있다. 지정된 SharedArrayBuffer 동작을 상속하려는 서브클래스 생성자는 SharedArrayBuffer.prototype 내장 메서드를 지원하는 데 필요한 내부 상태로 서브클래스 인스턴스를 생성하고 초기화하기 위해 SharedArrayBuffer 생성자에 대한 super 호출을 포함해야 한다.ArrayBuffer와 달리, SharedArrayBuffer는 detached될 수 없으며 그 내부 [[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(10) 호출은 sab.grow(20)이 먼저 발생했더라도 결코 sab를 축소하지 않는다. 그 경우 대신 RangeError를 던진다.
SharedArrayBuffer.prototype.growable은 set 접근자 함수가
SharedArrayBuffer.prototype.maxByteLength는 set 접근자 함수가
이 메서드는 호출될 때 다음 단계를 수행한다:
이 속성은 { [[Writable]]:
SharedArrayBuffer 인스턴스는
SharedArrayBuffer 인스턴스는 ArrayBuffer 인스턴스와 달리 결코 detached되지 않는다.
다음은
가능한 경우 프로그램은 배포 환경에서 테스트할 것을 권장한다. 사용 가능한 물리 메모리의 양은 하드웨어 장치마다 크게 다르다. 마찬가지로 가상 메모리 서브시스템도 하드웨어 장치와 운영 체제마다 크게 다르다. 64비트 데스크톱 웹 브라우저에서 메모리 부족 오류 없이 실행되는 애플리케이션이 32비트 모바일 웹 브라우저에서는 메모리가 부족해질 수 있다.
특정 최대 크기에 대해
u8[idx]의 경계 검사를 위한 길이 로드는 동기화하지 않는다. 일반적으로 명시적 동기화가 없으면, 한 속성 접근이 in-bound였다는 사실이 같은 agent의 후속 속성 접근도 in-bound임을 의미하지 않는다. 반대로 SharedArrayBuffer, length 및 byteLength getter를 통한 길이의 명시적 로드는 동기화한다.
다음은
증가 연산은
증가된 메모리는 병렬로 발생하는 모든 racy 접근을 포함하여, 생성 순간부터 0으로 채워진 것처럼 보여야 한다. 이는 zero-filled-on-demand 가상 메모리 페이지를 통해 달성하거나, 메모리를 수동으로 0으로 채우는 경우 신중한 동기화를 통해 달성할 수 있다.
실제로 임베디드 장치처럼 MMU가 없는 환경에서 실행되는
DataView With Buffer Witness Record는 DataView와 함께 viewed buffer의 캐시된 바이트 길이를 캡슐화하는 데 사용되는
DataView With Buffer Witness Records는
| 필드 이름 | 값 | 의미 |
|---|---|---|
| [[Object]] | DataView | 그 버퍼의 바이트 길이가 로드되는 DataView 객체. |
| [[CachedBufferByteLength]] |
음이 아닌 |
|
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 객체는 공유 메모리 배열 셀에 대해 분할 불가능하게(원자적으로) 동작하는 함수와, agent가 primitive 이벤트를 기다리고 dispatch할 수 있게 하는 함수를 제공한다. 규율 있게 사용하면, Atomics 함수는 공유 메모리를 통해 통신하는 multi-agent 프로그램이 병렬 CPU에서도 잘 이해된 순서로 실행될 수 있게 한다. 공유 메모리 통신을 지배하는 규칙은 아래에 정의된
ECMAScript에서 공유 메모리를 프로그래밍하고 구현하기 위한 정보성 지침은
Waiter Record는 Atomics.wait 또는 Atomics.waitAsync의 특정 호출을 나타내는 데 사용되는
Waiter Record는
| 필드 이름 | 값 | 의미 |
|---|---|---|
| [[AgentSignifier]] | agent signifier |
Atomics.wait 또는 Atomics.waitAsync를 호출한 agent.
|
| [[PromiseCapability]] |
PromiseCapability |
Atomics.waitAsync 호출을 나타내는 경우 결과 promise이고, 그렇지 않으면 |
| [[TimeoutTime]] | 음이 아닌 확장 수학 값 | timeout이 트리거될 수 있는 가장 이른 시간. time value를 사용해 계산된다. |
| [[Result]] |
|
호출의 반환값. |
WaiterList Record는 Atomics.wait, Atomics.waitAsync, 그리고 Atomics.notify를 통한 agent의 대기와 알림을 설명하는 데 사용된다.
WaiterList Record는
| 필드 이름 | 값 | 의미 |
|---|---|---|
| [[Waiters]] |
|
이 WaiterList가 연결된 위치에서 대기 중인 Atomics.wait 또는 Atomics.waitAsync 호출들.
|
| [[MostRecentLeaveEvent]] |
|
자신의 |
WaiterList 안에는 같은 agent signifier를 가진 여러
agent cluster는 WaiterList Record들의 저장소를 가진다. 이 저장소는 (block, i)로 색인되며, 여기서 block은
각 WaiterList Record는 평가 중 그 WaiterList Record에 대한 독점 접근을 제어하는 critical section을 가진다. 한 번에 하나의 agent만 WaiterList Record의 critical section에 들어갈 수 있다. WaiterList Record의 critical section에 들어가고 나오는 것은
The abstract operation ValidateIntegerTypedArray takes arguments typedArray (an ECMAScript language value) and waitable (a Boolean) and returns either a
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 either a
The abstract operation RevalidateAtomicAccess takes arguments typedArray (a
The abstract operation GetWaiterList takes arguments block (a
The abstract operation EnterCriticalSection takes argument waiterList (a
EnterCriticalSection은
The abstract operation LeaveCriticalSection takes argument waiterList (a
The abstract operation AddWaiter takes arguments waiterList (a
The abstract operation RemoveWaiter takes arguments waiterList (a
The abstract operation RemoveWaiters takes arguments waiterList (a
The abstract operation SuspendThisAgent takes arguments waiterList (a
Atomics.notify 호출을 통해)으로만 suspension에서 깨어날 수 있다.The abstract operation NotifyWaiter takes arguments waiterList (a
agent는 다른 agent의 promise capability를
The abstract operation EnqueueResolveInAgentJob takes arguments agentSignifier (an agent signifier), promiseCapability (a PromiseCapability
The abstract operation DoWait takes arguments mode (
additionalTimeout은 구현이 전력 소비를 줄이거나 timing attack을 완화하기 위해 타이머 해상도를 거칠게 만드는 것처럼 필요에 따라 timeout을 padding할 수 있게 한다. 이 값은 DoWait 호출마다 다를 수 있다.
The abstract operation EnqueueAtomicsWaitAsyncTimeoutJob takes arguments waiterList (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 either a
The abstract operation ByteListBitwiseOp takes arguments op (&, ^, or |), xBytes (a
&이면,^이면,|이다.The abstract operation ByteListEqual takes arguments xBytes (a
이 함수는 호출될 때 다음 단계를 수행한다:
이 함수는 호출될 때 다음 단계를 수행한다:
&, xBytes, yBytes)를 반환한다.이 함수는 호출될 때 다음 단계를 수행한다:
이 함수는 호출될 때 다음 단계를 수행한다:
이 함수는 호출될 때 다음 단계를 수행한다:
이 함수는 최적화 primitive이다. 직관은 크기 n 바이트의 datum에 대한 atomic primitive(compareExchange, load, store, add, sub, and, or, xor, 또는 exchange)의 원자적 단계가 주변 agent가 그 datum을 구성하는 n 바이트 외부의 lock을 획득하지 않고 수행된다면, Atomics.isLockFree(n)가
Atomics.isLockFree(4)는 알려진 모든 관련 하드웨어에서 지원될 수 있으므로 항상
이 함수가 반환하는 값과 관계없이 모든 atomic 연산은 원자적임이 보장된다. 예를 들어 연산 도중에 visible operation이 발생하는 일은 결코 없다(예: "tearing").
이 함수는 호출될 때 다음 단계를 수행한다:
이 함수는 호출될 때 다음 단계를 수행한다:
|, xBytes, yBytes)를 반환한다.이 함수는 호출될 때 다음 단계를 수행한다:
이 함수는 호출될 때 다음 단계를 수행한다:
이 함수는 주변 agent를 wait queue에 넣고 알림을 받거나 wait가 timeout될 때까지 일시 중단하며, 그 경우들을 구별하는 String을 반환한다.
호출될 때 다음 단계를 수행한다:
이 함수는 호출하는 agent가 알림을 받거나 timeout에 도달하면 resolve되는 Promise를 반환한다.
호출될 때 다음 단계를 수행한다:
이 함수는 wait queue에서 잠자고 있는 일부 agent들에게 알린다.
호출될 때 다음 단계를 수행한다:
이 함수는 호출될 때 다음 단계를 수행한다:
^, xBytes, yBytes)를 반환한다.이 속성은 { [[Writable]]:
JSON 객체는:
parse와 stringify를 포함한다.new 연산자와 함께 생성자로 사용할 수 없다.JSON Data Interchange Format은 ECMA-404에 정의되어 있다. 이 명세에서 사용되는 JSON interchange format은 ECMA-404에 설명된 것과 정확히 같다. JSON.parse와 JSON.stringify의 적합한 구현은 형식에서 어떤 삭제나 확장도 없이 ECMA-404 명세에 설명된 정확한 interchange format을 지원해야 한다.
이 함수는 호출될 때 다음 단계를 수행한다:
이 함수는 JSON 텍스트(JSON 형식의 String)를 구문 분석하고 ECMAScript 언어 값을 생성한다. JSON 형식은 ECMAScript 리터럴, Array Initializer, Object Initializer의 구문과 유사한 구문으로 리터럴, 배열, 객체를 표현한다. 구문 분석 후 JSON 객체는 ECMAScript 객체로 실현된다. JSON 배열은 ECMAScript Array 인스턴스로 실현된다. JSON 문자열, 숫자, 불리언, null은 ECMAScript String, Number, Boolean, 그리고
선택적 reviver 매개변수는 결과를 필터링하고 변환할 수 있는 함수이다. parse에 의해 생성된 각 값에 대해, reviver는 세 인자(연관된 속성 키, 값, 그리고 context 객체)와 함께 호출된다. 속성이 수정되지 않았고 그 값이 primitive이면, 제공된 context 객체는 대응하는 Parse Node의 소스 텍스트를 포함하는
이 함수의
The abstract operation ParseJSON takes argument text (a String) and returns either a
JSON.parse의 적합한 구현이 JSON 문법을 확장하는 것은 허용되지 않는다. 구현이 수정되거나 확장된 JSON interchange format을 지원하고자 한다면, 다른 parse 함수를 정의하여 그렇게 해야 한다.
유효한 JSON 텍스트는 ECMAScript
그러나
객체 안에 중복 name String이 있는 경우, 같은 키에 대해 어휘적으로 앞서는 값은 덮어써진다.
JSON Parse Record는 JSON 텍스트에서 구문 분석된 값의 초기 상태를 설명하는 데 사용되는
JSON Parse Record는
| 필드 이름 | 값 | 의미 |
|---|---|---|
| [[ParseNode]] | Parse Node | context Parse Node. |
| [[Key]] | 속성 이름 | [[Value]]와 연관된 속성 이름. |
| [[Value]] | ECMAScript 언어 값 | [[ParseNode]]의 평가에 의해 생성된 값. |
| [[Elements]] | [[Value]]가 Array이면, 이는 [[Value]]의 요소에 대응하는 |
|
| [[Entries]] | [[Value]]가 Array가 아닌 Object이면, 이는 [[Value]]의 엔트리에 대응하는 |
The abstract operation CreateJSONParseRecord takes arguments parseNode (a Parse Node), key (a
{"a":"lost","a":"kept"})을 지정하는 경우, 결과 ECMAScript 객체의 대응 속성 값은 그 이름을 가진 마지막 쌍에 의해 지정된다.The abstract operation InternalizeJSONProperty takes arguments holder (an Object), name (a String), reviver (a
이 알고리즘은 [[Delete]] 또는
호출될 때 다음 단계를 수행한다:
The abstract operation ShallowestContainedJSONValue takes argument root (a Parse Node) and returns a Parse Node or
JSON.parse 내장 함수 객체이다(number 토큰은 음수 값을 나타낼 수 있다. ECMAScript에서 부정은 - 뒤에 파생 The syntax-directed operation JSONArrayLiteralContentNodes takes no arguments and returns a
이 함수는 string, number, boolean, 또는 null 값의 raw JSON 텍스트를 나타내는 객체를 반환한다.
이 함수는 ECMAScript 언어 값을 나타내는 UTF-16 인코딩 JSON 형식의 String 또는
호출될 때 다음 단계를 수행한다:
이 함수의
JSON 구조는 임의의 깊이로 중첩될 수 있지만, 비순환이어야 한다. value가 순환 구조이거나 순환 구조를 포함하면, 이 함수는
a = [];
a[0] = a;
my_text = JSON.stringify(a); // 이는 TypeError를 던져야 한다.
Symbolic primitive 값은 다음과 같이 렌더링된다:
String 값은 QUOTATION MARK (") 코드 단위로 감싸진다. 코드 단위 "와 \는 \ 접두사로 escape된다. 제어 문자 코드 단위는 escape sequence \uHHHH 또는 더 짧은 형식 \b (BACKSPACE), \f (FORM FEED), \n (LINE FEED), \r (CARRIAGE RETURN), \t (CHARACTER TABULATION)로 대체된다.
JSON 표현을 가지지 않는 값(예:
객체는 U+007B (LEFT CURLY BRACKET) 뒤에 U+002C (COMMA)로 구분된 0개 이상의 속성이 오고, U+007D (RIGHT CURLY BRACKET)로 닫히는 방식으로 렌더링된다. 속성은 속성 이름을 나타내는 따옴표로 감싼 String, U+003A (COLON), 그리고 stringified된 속성 값이다. 배열은 여는 U+005B (LEFT SQUARE BRACKET) 뒤에 U+002C (COMMA)로 구분된 0개 이상의 값이 오고, 닫는 U+005D (RIGHT SQUARE BRACKET)로 렌더링된다.
JSON Serialization Record는 JSON 형식으로의 직렬화를 가능하게 하는 데 사용되는
JSON Serialization Record는
| 필드 이름 | 값 | 의미 |
|---|---|---|
| [[ReplacerFunction]] | 함수 객체 또는 |
객체 속성에 대한 대체 값을 제공할 수 있는 함수(JSON.stringify의 replacer 매개변수에서 옴). |
| [[PropertyList]] | String의 |
배열이 아닌 객체를 직렬화할 때 포함할 속성의 이름(JSON.stringify의 replacer 매개변수에서 옴). |
| [[Gap]] | String | 들여쓰기의 단위(JSON.stringify의 space 매개변수에서 옴). |
| [[Stack]] | Object의 |
직렬화가 진행 중인 중첩 객체들의 집합. 순환 구조를 감지하는 데 사용된다. |
| [[Indent]] | String | 현재 들여쓰기. |
The abstract operation SerializeJSONProperty takes arguments state (a
The abstract operation QuoteJSONString takes argument value (a String) and returns a String. value를 0x0022 (QUOTATION MARK) 코드 단위로 감싸고 그 안의 특정 다른 코드 단위를 escape한다. 이 연산은
| 코드 포인트 | Unicode 문자 이름 | 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 constructor (a code unit) and returns a String. constructor를 Unicode escape sequence로 나타낸다. 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]]: