ECMAScript 规范定义的内置全局(约 60 个),任何引擎(Node/浏览器/Deno/Bun)都直接可用。与 globals-node 是两层关系:本页是语言层,那页是 Node 运行时额外暴露/对齐的。

1. 值属性(4)

undefined;          // 未赋值变量的默认值
NaN;                // 非数字,NaN !== NaN,用 Number.isNaN() 判断
Infinity;           // 正无穷,1/0 的结果
globalThis;         // 全局对象自身,跨环境统一入口

2. 全局函数(9)

parseInt("42px");            // 42,解析整数前缀
parseFloat("3.14abc");       // 3.14
isNaN(NaN);                  // true(会先强转,推荐 Number.isNaN)
isFinite(1/0);               // false
encodeURIComponent("a b&c"); // "a%20b%26c",URL 参数编码
decodeURIComponent("a%20b"); // "a b"
encodeURI("https://a.com/a b");  // 整条 URL 编码,保留 :/? 等
eval("1+1");                 // 动态执行字符串代码,生产禁用

3. 基础对象(12)

Object.keys({ a: 1 });             // ["a"],对象静态工具集
Function;                          // 所有函数的构造器,typeof fn === "function"
Boolean(0);                        // false,真值转换
Symbol("id");                      // 唯一标识,做私有属性键
new Error("msg").stack;            // 错误 + 调用栈
// 错误子类:TypeError RangeError ReferenceError SyntaxError
//          URIError EvalError AggregateError(Promise.any 全失败时抛出)
JSON.parse === JSON.parse;         // JSON 不是构造器,是纯静态对象,见第 8 节

4. 数字与日期(4)

Number("42");                 // 42,Number.isInteger(1.5) === false
BigInt("9007199254740993");   // 超 Number.MAX_SAFE_INTEGER 的整数
Math.max(1, 2);               // 纯静态:floor/random/hypot 等
new Date().toISOString();     // "2026-09-03T..."

5. 文本处理(2)

"abc".toUpperCase();          // 字符串原始值 + String 包装对象方法
/\d+/.exec("a12b34");         // ["12", index: 1, ...],正则匹配
"ab".replaceAll("a", "x");    // 全部替换

6. 索引集合(10)

[1, 2].map(x => x * 2);       // 数组 + 迭代方法
const u8 = new Uint8Array(4); // 类型化数组(共 9 种:
u8[0] = 256;                  //   Int8/Uint8/Int16/Uint16/Int32/Uint32/
console.log(u8[0]);           //   Float32/Float64/BigUint64Array),溢出截断为 0

7. 键控集合(5)

const m = new Map([["k", 1]]);   // 任意类型键,保序
m.get("k");                      // 1
const s = new Set([1, 1, 2]);    // 去重集合
const wm = new WeakMap();        // 键必须对象,可被回收,不阻止 GC
const wr = new WeakRef(obj);     // 弱引用,wr.deref() 可能返回 undefined

8. 结构化数据(5)

JSON.stringify({ a: 1 });          // 序列化(不支持 undefined/循环引用)
const buf = new ArrayBuffer(8);    // 原始字节缓冲,配合 TypedArray 视图
new DataView(buf).setInt32(0, 7);  // 按字节序读写
Atomics.add(new Int32Array(new SharedArrayBuffer(4)), 0, 1);  // 共享内存原子操作

9. 内存管理(1)

const reg = new FinalizationRegistry((held) => console.log("被回收:", held));
reg.register(obj, "obj");   // obj 被 GC 时回调(时机不保证)

10. 控制抽象(6)

new Promise(r => r(1));            // 异步(详见 [[langs/nodes/concepts/promise]])
function* g() { yield 1 }          // GeneratorFunction
async function af() {}             // AsyncFunction
async function* ag() { yield 1 }   // AsyncGeneratorFunction
[1,2].values().next();             // Iterator 协议
// AsyncIterator:for await (const x of asyncIterable)

11. 反射(2)

const p = new Proxy({}, {
  get: (t, k) => k in t ? t[k] : `没有 ${k}`,
  set: (t, k, v) => { if (typeof v !== "number") throw new TypeError(); t[k] = v; return true; },
});
Reflect.get(p, "x");       // "没有 x",与 Proxy trap 一一对应的静态方法集
// 13 个 trap 全表、响应式/负索引/可撤销代理等实战模式详见 [[langs/nodes/concepts/proxy-reflect]]

12. 国际化(1)

new Intl.DateTimeFormat("zh-CN").format(new Date());      // "2026/9/3"
new Intl.NumberFormat("en-US").format(1234567.89);        // "1,234,567.89"
new Intl.Segmenter("zh-CN").segment("你好世界");            // 中文分词
// 还有 RelativeTimeFormat/PluralRules/ListFormat 等 13+ 子构造器

要点速记

  1. 语言内置 ≈ 4 值属性 + 9 函数 + 约 47 个构造器/命名空间,全部由 ECMAScript 规范定义
  2. 与运行时全局的边界:Promise/Proxy 本页,process/Buffer/fetch 见 globals-node
  3. Math/JSON/Atomics/Reflect/Intl 是纯静态命名空间,不能 new
  4. TypedArray 溢出按位宽截断,跨语言交换二进制数据时注意字节序(DataView 显式 vs TypedArray 小端)