?um/p1-90`本节、
读-改-写修改函数是一个数学函数,表示为一个
为有助于验证读-改-写修改函数的算法步骤构成一个纯数学函数,建议采用以下编辑约定:
固定长度 ArrayBuffer 是创建之后其字节长度不能改变的 ArrayBuffer。
可调整大小 ArrayBuffer 是创建之后其字节长度可以通过调用
所创建的 ArrayBuffer 对象种类取决于传递给
The abstract operation AllocateArrayBuffer takes arguments constructor (一个
The abstract operation ArrayBufferByteLength takes arguments arrayBuffer (一个 ArrayBuffer 或 SharedArrayBuffer,) and order (
The abstract operation ArrayBufferCopyAndDetach takes arguments arrayBuffer (一个
realloc。The abstract operation IsDetachedBuffer takes argument arrayBuffer (一个 ArrayBuffer 或 SharedArrayBuffer,) and returns 一个 Boolean. It performs the following steps when called:
The abstract operation DetachArrayBuffer takes argument arrayBuffer (一个 ArrayBuffer,) and optional argument key (任意值,) and returns 要么是一个包含
分离 ArrayBuffer 实例会将作为其后备存储的
The abstract operation CloneArrayBuffer takes arguments srcBuffer (一个 ArrayBuffer 或 SharedArrayBuffer,), srcByteOffset (一个非负
The abstract operation GetArrayBufferMaxByteLengthOption takes argument options (一个
The host-defined abstract operation HostResizeArrayBuffer takes arguments buffer (一个 ArrayBuffer,) and newByteLength (一个非负
HostResizeArrayBuffer 的实现必须符合以下要求:
HostResizeArrayBuffer 的默认实现是返回
The abstract operation IsFixedLengthArrayBuffer takes argument arrayBuffer (一个 ArrayBuffer 或 SharedArrayBuffer,) and returns 一个 Boolean. It performs the following steps when called:
The abstract operation IsUnsignedElementType takes argument type (一个
The abstract operation IsUnclampedIntegerElementType takes argument type (一个
The abstract operation IsBigIntElementType takes argument type (一个
The abstract operation IsNoTearConfiguration takes arguments type (一个
The abstract operation RawBytesToNumeric takes arguments type (一个
The abstract operation GetRawBytesFromSharedBlock takes arguments block (一个
The abstract operation GetValueFromBuffer takes arguments arrayBuffer (一个 ArrayBuffer 或 SharedArrayBuffer,), byteIndex (一个非负
The abstract operation NumericToRawBytes takes arguments type (一个
The abstract operation SetValueInBuffer takes arguments arrayBuffer (一个 ArrayBuffer 或 SharedArrayBuffer,), byteIndex (一个非负
The abstract operation GetModifySetValueInBuffer takes arguments arrayBuffer (一个 ArrayBuffer 或一个 SharedArrayBuffer,), byteIndex (一个非负
ArrayBuffer
extends 子句的值。意图继承指定 ArrayBuffer 行为的子类super 调用,以创建并初始化具有支持 ArrayBuffer.prototype 内置方法所必需内部状态的子类实例。此函数在被调用时执行以下步骤:
ArrayBuffer
此函数在被调用时执行以下步骤:
ArrayBuffer.prototype 的初始值是
此属性具有特性 { [[Writable]]:
ArrayBuffer[%Symbol.species%] 是一个
此函数的
ArrayBuffer 原型对象:
ArrayBuffer.prototype.byteLength 是一个
ArrayBuffer.prototype.constructor 的初始值是
ArrayBuffer.prototype.detached 是一个
ArrayBuffer.prototype.maxByteLength 是一个
ArrayBuffer.prototype.resizable 是一个
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此属性具有特性 { [[Writable]]:
ArrayBuffer 实例从
其 [[ArrayBufferData]] 为
其 [[ArrayBufferDetachKey]] 被设置为
以下是供处理
建议尽可能在程序的部署环境中进行测试。可用物理内存的数量在不同硬件设备之间差异很大。同样,虚拟内存子系统在不同硬件设备以及操作系统之间也差异很大。一个在 64 位桌面 Web 浏览器中运行而不会出现内存不足错误的应用,可能会在 32 位移动 Web 浏览器中耗尽内存。
为
请注意,成功为某个特定最大大小构造
以下是供实现
如果
如果
固定长度 SharedArrayBuffer 是创建之后其字节长度不能改变的 SharedArrayBuffer。
可增长 SharedArrayBuffer 是创建之后其字节长度可以通过调用
所创建的 SharedArrayBuffer 对象种类取决于传递给
The abstract operation AllocateSharedArrayBuffer takes arguments constructor (一个
The abstract operation IsSharedArrayBuffer takes argument obj (一个 ArrayBuffer 或一个 SharedArrayBuffer,) and returns 一个 Boolean. 它测试一个对象是否为 SharedArrayBuffer。 It performs the following steps when called:
The abstract operation IsGrowableSharedArrayBuffer takes argument obj (一个 ArrayBuffer 或一个 SharedArrayBuffer,) and returns 一个 Boolean. 它测试一个对象是否为可增长的 SharedArrayBuffer。 It performs the following steps when called:
The host-defined abstract operation HostGrowSharedArrayBuffer takes arguments buffer (一个 SharedArrayBuffer,) and newByteLength (一个非负
HostGrowSharedArrayBuffer 的实现必须符合以下要求:
上面的第二项要求有意对如何或何时读取 buffer 的当前字节长度保持模糊。因为字节长度必须通过底层硬件上的原子读-改-写操作来更新,所以使用 load-link/store-conditional 或 load-exclusive/store-exclusive 指令对的架构可能希望让成对指令在指令流中彼此接近。因此,
这与
HostGrowSharedArrayBuffer 的默认实现是返回
SharedArrayBuffer
extends 子句的值。意图继承指定 SharedArrayBuffer 行为的子类super 调用,以创建并初始化具有支持 SharedArrayBuffer.prototype 内置方法所必需内部状态的子类实例。每当
与 ArrayBuffer 不同,SharedArrayBuffer 不能变为已分离,并且其内部 [[ArrayBufferData]] 槽永远不是
此函数在被调用时执行以下步骤:
SharedArrayBuffer
SharedArrayBuffer.prototype 的初始值是
此属性具有特性 { [[Writable]]:
SharedArrayBuffer[%Symbol.species%] 是一个
此函数的
SharedArrayBuffer 原型对象:
SharedArrayBuffer.prototype.byteLength 是一个
SharedArrayBuffer.prototype.constructor 的初始值是
此方法在被调用时执行以下步骤:
禁止 compare-exchange 在更新长度时发生虚假失败。如果新长度的边界检查通过,且实现没有内存不足,则总是会向
对 SharedArrayBuffer.prototype.grow 的并行调用是全序的。例如,考虑两个竞争调用:sab.grow(10) 和 sab.grow(20)。这两个调用之一保证会赢得竞争。即使 sab.grow(20) 先发生,sab.grow(10) 的调用也永远不会收缩 sab;在这种情况下,它会改为抛出 RangeError。
SharedArrayBuffer.prototype.growable 是一个
SharedArrayBuffer.prototype.maxByteLength 是一个
此方法在被调用时执行以下步骤:
此属性具有特性 { [[Writable]]:
SharedArrayBuffer 实例从
SharedArrayBuffer 实例不同于 ArrayBuffer 实例,它们永远不会被分离。
以下是供处理
建议尽可能在程序的部署环境中进行测试。可用物理内存的数量在不同硬件设备之间差异很大。同样,虚拟内存子系统在不同硬件设备以及操作系统之间也差异很大。一个在 64 位桌面 Web 浏览器中运行而不会出现内存不足错误的应用,可能会在 32 位移动 Web 浏览器中耗尽内存。
为
请注意,成功为某个特定最大大小构造
并非所有对u8[idx])边界检查的长度加载不是同步性的。通常,在没有显式同步的情况下,某次属性访问在边界内并不意味着同一 length 和 byteLength getter 对长度的显式加载是同步性的。由内置方法为了检查
以下是供实现
建议将
因为 grow 操作可能与
增长出来的内存从创建的那一刻起就必须表现为已清零,包括对任何并行的竞争访问也是如此。这可以通过按需填零的虚拟内存页实现,或者在手动清零内存时通过仔细同步实现。
实践中,在没有虚拟内存的
DataView With Buffer Witness Record 是一个
DataView With Buffer Witness Record 具有
| 字段名 | 值 | 含义 |
|---|---|---|
| [[Object]] | 一个 DataView | 加载其 buffer 字节长度的 DataView 对象。 |
| [[CachedBufferByteLength]] |
一个非负 |
创建该 |
The abstract operation MakeDataViewWithBufferWitnessRecord takes arguments obj (一个 DataView,) and order (
The abstract operation GetViewByteLength takes argument viewRecord (一个
The abstract operation IsViewOutOfBounds takes argument viewRecord (一个
The abstract operation GetViewValue takes arguments view (一个
The abstract operation SetViewValue takes arguments view (一个
DataView
extends 子句的值。意图继承指定 DataView 行为的子类super 调用,以创建并初始化具有支持 DataView.prototype 内置方法所必需内部状态的子类实例。此函数在被调用时执行以下步骤:
DataView
DataView.prototype 的初始值是
此属性具有特性 { [[Writable]]:
DataView 原型对象:
DataView.prototype.buffer 是一个
DataView.prototype.byteLength 是一个
DataView.prototype.byteOffset 是一个
DataView.prototype.constructor 的初始值是
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此属性具有特性 { [[Writable]]:
DataView 实例是从
[[DataView]] 内部槽的值在本规范中并未使用。规范中仅使用该内部槽的存在来识别使用 DataView
Atomics 对象:
new 运算符一起用作Atomics 对象提供一些函数,这些函数以不可分割(原子)的方式操作共享内存数组单元,也提供一些使
关于在 ECMAScript 中编程和实现共享内存的信息性指南,请参见
Waiter Record 是一个 Atomics.wait 或 Atomics.waitAsync 的某个特定调用。
Waiter Record 具有
| 字段名 | 值 | 含义 |
|---|---|---|
| [[AgentSignifier]] |
一个 |
调用 Atomics.wait 或 Atomics.waitAsync 的 |
| [[PromiseCapability]] |
一个 |
如果表示对 Atomics.waitAsync 的调用,则为产生的 promise;否则为 |
| [[TimeoutTime]] |
一个非负 |
timeout 可以被触发的最早时间;使用 |
| [[Result]] |
|
该调用的返回值。 |
WaiterList Record 用于解释 Atomics.wait、Atomics.waitAsync 和 Atomics.notify 进行等待和通知。
WaiterList Record 具有
| 字段名 | 值 | 含义 |
|---|---|---|
| [[Waiters]] |
一个由 |
正在等待与此 WaiterList 相关联位置的 Atomics.wait 或 Atomics.waitAsync 调用。
|
| [[MostRecentLeaveEvent]] |
一个 |
最近一次离开其 |
一个 WaiterList 中可以有多个具有相同
每个 WaiterList Record 都有一个临界区,该临界区在求值期间控制对该 WaiterList Record 的排他访问。同一时间只有一个
The abstract operation ValidateIntegerTypedArray takes arguments typedArray (一个
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 normal completion containing a non-negative integer or a throw completion. It performs the following steps when called:
The abstract operation RevalidateAtomicAccess takes arguments typedArray (a
The abstract operation GetWaiterList takes arguments block (一个
The abstract operation EnterCriticalSection takes argument waiterList (一个
当尝试进入
The abstract operation LeaveCriticalSection takes argument waiterList (一个
The abstract operation AddWaiter takes arguments waiterList (一个
The abstract operation RemoveWaiter takes arguments waiterList (一个
The abstract operation RemoveWaiters takes arguments waiterList (一个
The abstract operation SuspendThisAgent takes arguments waiterList (一个
Atomics.notify)而从挂起中醒来。The abstract operation NotifyWaiter takes arguments waiterList (一个
The abstract operation EnqueueResolveInAgentJob takes arguments agentSignifier (一个
The abstract operation DoWait takes arguments mode (
additionalTimeout 允许实现按需填充 timeout,例如用于降低功耗或粗化计时器分辨率以缓解定时攻击。该值在 DoWait 的不同调用之间可以不同。
The abstract operation EnqueueAtomicsWaitAsyncTimeoutJob takes arguments waiterList (一个
The abstract operation AtomicCompareExchangeInSharedBlock takes arguments block (一个
The abstract operation AtomicReadModifyWrite takes arguments typedArray (一个
The abstract operation ByteListBitwiseOp takes arguments op (&、^ 或 |,), xBytes (一个由
&,则^,则|。The abstract operation ByteListEqual takes arguments xBytes (一个由
此函数在被调用时执行以下步骤:
此函数在被调用时执行以下步骤:
&, xBytes, yBytes)。此函数在被调用时执行以下步骤:
此函数在被调用时执行以下步骤:
此函数在被调用时执行以下步骤:
此函数是一个优化原语。其直觉是:如果大小为 n 字节的数据上的原子原语(compareExchange、load、store、add、sub、and、or、xor 或 exchange)的原子步骤将在不让周围 Atomics.isLockFree(n) 将返回
Atomics.isLockFree(4) 总是返回
无论此函数返回的值是什么,所有原子操作都保证是原子的。例如,它们永远不会在操作中间发生可见操作(例如“撕裂”)。
此函数在被调用时执行以下步骤:
此函数在被调用时执行以下步骤:
|, xBytes, yBytes)。此函数在被调用时执行以下步骤:
此函数在被调用时执行以下步骤:
此函数将周围
它在被调用时执行以下步骤:
此函数返回一个 Promise,该 Promise 会在调用
它在被调用时执行以下步骤:
此函数通知一些正在等待队列中休眠的
它在被调用时执行以下步骤:
此函数在被调用时执行以下步骤:
^, xBytes, yBytes)。此属性具有特性 { [[Writable]]:
JSON 对象:
parse 和 stringify,它们用于解析和构造 JSON 文本。new 运算符一起用作JSON Data Interchange Format 在 ECMA-404 中定义。本规范中使用的 JSON 交换格式正是 ECMA-404 所描述的格式。JSON.parse 和 JSON.stringify 的符合实现必须支持 ECMA-404 规范中描述的精确交换格式,不得对该格式进行任何删除或扩展。
此函数在被调用时执行以下步骤:
此函数解析一个 JSON 文本(JSON 格式的 String)并产生一个
可选的 reviver 参数是一个可以过滤和转换结果的函数。对于 parse 产生的每个值,都会以三个参数(关联的
此函数的
The abstract operation ParseJSON takes argument text (一个 String,) and returns 要么是一个包含字段 [[ParseNode]](一个 Parse Node)和 [[Value]](一个
符合实现的 JSON.parse 不允许扩展 JSON 语法。如果某个实现希望支持修改过或扩展过的 JSON 交换格式,它必须通过定义另一个 parse 函数来做到这一点。
有效 JSON 文本是 ECMAScript
然而,由于
在一个对象中存在重复 name Strings 的情况下,词法上靠前的同一键的值应被
JSON Parse Record 是一个
JSON Parse Records 具有
| 字段名 | 值 | 含义 |
|---|---|---|
| [[ParseNode]] | 一个 Parse Node | context Parse Node。 |
| [[Key]] | 一个 |
与 [[Value]] 相关联的 |
| [[Value]] | 一个 |
由 [[ParseNode]] 的求值产生的值。 |
| [[Elements]] | 一个由 |
如果 [[Value]] 是一个 Array,则它包含与 [[Value]] 的元素相对应的 |
| [[Entries]] | 一个由 |
如果 [[Value]] 是一个非 Array Object,则它包含与 [[Value]] 的 entries 相对应的 |
The abstract operation CreateJSONParseRecord takes arguments parseNode (一个 Parse Node,), key (一个
{"a":"lost","a":"kept"})的情况下,结果 ECMAScript 对象对应属性的值由具有该 name 的最后一个 pair 指定。The abstract operation InternalizeJSONProperty takes arguments holder (一个 Object,), name (一个 String,), reviver (一个
如果 [[Delete]] 或
它在被调用时执行以下步骤:
The abstract operation ShallowestContainedJSONValue takes argument root (一个 Parse Node,) and returns 一个 Parse Node 或
JSON.parse 内置number token 可以表示一个负值。在 ECMAScript 中,取负表示为一元操作,其中 - 后跟一个派生的 The syntax-directed operation JSONArrayLiteralContentNodes takes no arguments and returns 一个由
此函数返回一个对象,该对象表示字符串、数字、布尔值或 null 值的原始 JSON 文本。
此函数返回一个采用 UTF-16 编码 JSON 格式的 String,用于表示一个
它在被调用时执行以下步骤:
此函数的
JSON 结构允许嵌套到任意深度,但它们必须是无环的。如果 value 是或包含一个循环结构,则此函数必须抛出
a = [];
a[0] = a;
my_text = JSON.stringify(a); // This must throw a TypeError.
符号性 primitive 值按如下方式渲染:
String 值被包裹在 QUOTATION MARK (") code units 中。code units " 和 \ 会以 \ 前缀转义。控制字符 code units 会被替换为 escape sequences \uHHHH,或替换为较短形式 \b (BACKSPACE)、\f (FORM FEED)、\n (LINE FEED)、\r (CARRIAGE RETURN)、\t (CHARACTER TABULATION)。
没有 JSON 表示的值(例如
对象被渲染为 U+007B (LEFT CURLY BRACKET),后跟零个或多个属性,属性之间以 U+002C (COMMA) 分隔,并以 U+007D (RIGHT CURLY BRACKET) 闭合。属性是一个表示
JSON Serialization Record 是一个
JSON Serialization Records 具有
| 字段名 | 值 | 含义 |
|---|---|---|
| [[ReplacerFunction]] | 一个 |
能够为对象属性提供替换值的函数(来自 JSON.stringify 的 replacer 参数)。 |
| [[PropertyList]] | 要么是一个由 Strings 组成的 |
序列化非数组对象时要包含的 |
| [[Gap]] | 一个 String | 缩进单位(来自 JSON.stringify 的 space 参数)。 |
| [[Stack]] | 一个由 Objects 组成的 |
正在序列化过程中的嵌套对象集合。用于检测循环结构。 |
| [[Indent]] | 一个 String | 当前缩进。 |
The abstract operation SerializeJSONProperty takes arguments state (一个
The abstract operation QuoteJSONString takes argument value (一个 String,) and returns 一个 String. 它用 0x0022 (QUOTATION MARK) code units 包裹 value,并转义其中的某些其他 code units。此操作按
| Code Point | Unicode 字符名称 | 转义序列 |
|---|---|---|
| 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 (一个 code unit,) and returns 一个 String. 它将 constructor 表示为一个 Unicode escape sequence。 It performs the following steps when called:
The abstract operation SerializeJSONObject takes arguments state (一个
The abstract operation SerializeJSONArray takes arguments state (a
此属性具有特性 { [[Writable]]: