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),溢出截断为 07. 键控集合(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() 可能返回 undefined8. 结构化数据(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+ 子构造器要点速记
- 语言内置 ≈ 4 值属性 + 9 函数 + 约 47 个构造器/命名空间,全部由 ECMAScript 规范定义
- 与运行时全局的边界:
Promise/Proxy本页,process/Buffer/fetch见 globals-node Math/JSON/Atomics/Reflect/Intl是纯静态命名空间,不能new- TypedArray 溢出按位宽截断,跨语言交换二进制数据时注意字节序(DataView 显式 vs TypedArray 小端)