跳转到正文

规范覆盖范围

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 ✅

Web 平台 API(WHATWG / W3C,非 TC39)

除纯 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 清空机制稳定。