规范覆盖范围
Phasis 以当前 ECMAScript 规范(ES2024+)为目标,并跟踪处于 Stage 3 及以上阶段的 TC39 提案。本页是实际已发布内容的易读索引。
语言
| 功能 |
状态 |
词法声明(let、const),含 TDZ |
✅ |
| 块级作用域、函数作用域、模块作用域 |
✅ |
箭头函数(含词法 this) |
✅ |
| 默认参数、剩余参数、展开语法 |
✅ |
| 解构(数组、对象、嵌套、默认值、剩余元素) |
✅ |
| 模板字面量、标签模板 |
✅ |
| 计算属性名 |
✅ |
| 简写属性和方法 |
✅ |
| 类——构造函数、方法、getter/setter、静态成员 |
✅ |
| 类字段(公有、私有、静态) |
✅ |
| 私有方法和访问器 |
✅ |
方法和构造函数中的 super |
✅ |
| 装饰器(Stage 3) |
✅ |
| 静态初始化块 |
✅ |
可选链(?.)、空值合并(??) |
✅ |
逻辑赋值运算符(&&=、||=、??=) |
✅ |
数字分隔符(1_000_000) |
✅ |
BigInt 字面量(123n)和运算符 |
✅ |
| 异步函数、异步生成器、顶层 await |
✅ |
| 生成器(同步和异步) |
✅ |
for…of、for…in、for await…of |
✅ |
| 迭代器和可迭代对象(Symbol.iterator) |
✅ |
| Symbol 原始值和知名 Symbol |
✅ |
ES 模块(import / export、动态 import()) |
✅ |
import.meta |
✅ |
import attributes(Stage 3) |
✅ |
| 严格模式 + Annex B 旧版行为 |
✅ |
正则表达式(/u、/v、/d、命名组、后行断言) |
✅ |
| 自动分号插入(ASI) |
✅ |
Hashbang 语法(#!/usr/bin/env phasis) |
✅ |
| 严格模式下的适当尾调用(ES2015,规范要求) |
✅ |
标准库
基础类型
| 对象 |
覆盖情况 |
Object |
完整 — keys、values、entries、assign、create、freeze、seal、getOwnPropertyDescriptor(s)、setPrototypeOf、getOwnPropertyNames、getOwnPropertySymbols、hasOwn、groupBy、fromEntries 等 |
Array |
完整 — 每个原型方法均已覆盖,包括 at、flatMap、flat、findLast、findLastIndex、toReversed、toSorted、toSpliced、with、group、groupToMap |
String |
完整 — at、codePointAt、match、matchAll、replaceAll、padStart、padEnd、trimStart、trimEnd、isWellFormed、toWellFormed |
Number |
完整 — isFinite、isInteger、isNaN、isSafeInteger、EPSILON、MAX_SAFE_INTEGER 等 |
BigInt |
完整 — 通过 bcmath 实现任意精度 |
Boolean |
完整 |
Math |
完整 — 覆盖每个方法以及 NaN / Infinity / -0 的所有特殊情况 |
JSON |
完整 — parse、stringify、自定义替换函数、reviver、缩进 |
Symbol |
完整 — for、keyFor、所有知名 Symbol、Symbol.toPrimitive |
Function |
完整 — call、apply、bind、length、name、prototype 语义 |
集合
| 对象 |
覆盖情况 |
Map |
完整 — 包括 groupBy 和实时迭代 |
Set |
完整 — 包括 intersection、union、difference、symmetricDifference、isSubsetOf、isSupersetOf、isDisjointFrom |
WeakMap、WeakSet、WeakRef、FinalizationRegistry |
完整 |
异步
| 对象 |
覆盖情况 |
Promise |
完整 — all、race、any、allSettled、withResolvers、异步迭代 |
AsyncIterator、AsyncGenerator |
完整 |
| 微任务调度 |
✅ |
二进制数据
| 对象 |
覆盖情况 |
ArrayBuffer、SharedArrayBuffer |
完整 |
DataView |
完整 — getBigInt64、setBigInt64 等 |
Int8Array、Uint8Array、Uint8ClampedArray、Int16Array、Uint16Array、Int32Array、Uint32Array、BigInt64Array、BigUint64Array、Float16Array、Float32Array、Float64Array |
完整 |
Atomics — add、sub、and、or、xor、compareExchange、exchange、isLockFree、load、notify、pause、store、wait、waitAsync |
完整(仅限单代理) |
反射和代理
| 对象 |
覆盖范围 |
Proxy |
全部 13 个陷阱,可撤销 |
Reflect |
全部 14 个静态方法 |
错误
| 对象 |
覆盖范围 |
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError |
完整 |
AggregateError |
完整 |
SuppressedError(Stage 3 显式资源管理) |
完整 |
日期和时间
| 对象 |
覆盖范围 |
Date |
完整 |
Temporal(Stage 3) |
完整 — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar(包括希伯来历、中文、Dangi、埃塞俄比亚历等) |
国际化
| 对象 |
覆盖范围 |
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter |
完整(若 PHP 的 intl 扩展可用,则委托给该扩展) |
资源管理
| 对象 |
覆盖范围 |
DisposableStack, AsyncDisposableStack(Stage 3) |
完整 |
Symbol.dispose, Symbol.asyncDispose |
完整 |
using / await using 声明 |
完整 |
其他
| 对象 |
覆盖范围 |
RegExp(包括 /v 集合表示法、命名捕获、前后查找、粘滞/全局标志) |
完整 |
Iterator 辅助函数(Stage 3)— map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find |
完整 |
ShadowRealm(Stage 3) |
完整 |
globalThis |
✅ |
除纯 ECMAScript 外,Phasis还提供了多层 Web API 套件,实际的 JS 库会预先检查这些 API。完整接口范围和各领域的一致性情况,请参阅Web API。
| 套件 |
全局对象 |
WPT |
| Web 平台 |
URL, URLSearchParams, URLPattern, TextEncoder, TextDecoder, atob, btoa, structuredClone, performance, console, setTimeout / setInterval / queueMicrotask, reportError, self(globalThis 的别名), DOMException |
100 % |
| Fetch |
fetch, Request, Response, Headers, Body 混入, AbortController, AbortSignal, Blob, File, FormData, EventTarget, Event, 完整 WHATWG Streams(ReadableStream, WritableStream, TransformStream, 排队策略, BYOB),CompressionStream / DecompressionStream(zlib + 可选的 brotli,通过 ext-brotli 提供), navigator |
100 %¹ |
| Crypto |
crypto.getRandomValues, crypto.randomUUID, 完整 SubtleCrypto(digest、HMAC、AES-GCM/CBC/CTR、RSA-OAEP/PSS/PKCS1、ECDSA P-256/384/521、ECDH、HKDF、PBKDF2) |
100 % |
| WebSocket |
WebSocket(构造函数 + RFC 6455 帧编解码器,可通过 setWebSocketTransport 替换传输层) |
100 % |
| XHR |
XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent(基于 fetch 传输层,因此策略钩子适用) |
100 % |
| 事件循环 |
setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext(Stage 3) |
不适用(经 oracle 测试) |
¹ 不包括压缩测试样本中列入允许清单的子测试:需要 ext-brotli 的 brotli 用例,以及使用 SharedArrayBuffer 支持的输入的用例(tests/Wpt/WptTest.php 中的 EXPECTED_FAILURES)。
所有其他导入的 Web Platform Tests 均通过 — 一致性细分情况请参阅Web API。
尚未实现的内容
- 单个代理之外的 SharedArrayBuffer worker 语义 — 跨真实 OS 线程的多线程原子通知需要
pcntl,目前不在路线图中。单代理原子操作可用。 - 需要 ICU 76+ 字素簇的
Intl.Segmenter — 取决于宿主 PHP 的 intl 扩展版本。
版本管理
Phasis遵循语义化版本规范。版本系列对应 ECMAScript 规范草案:
| Phasis 版本 |
规范目标 |
Stage 3 提案 |
| 0.x |
ES2024 |
decorators、Temporal、显式资源管理、迭代器辅助方法、集合方法 |
升至 1.0 的前提是:ES2025 草案中的每个 Stage 4 提案都已实现,且 Promise 清空机制稳定。