JS References
bigint
- Chrome 67+, Safari 14.1+, Node 10.4+
- 能表示 int64
- ⚠️ 不能和 number 直接运算
- clamp/截断
- BigInt.asIntN
- BigInt.asUintN
Function
// 检测 AsyncIterator/Generator
// next, return, throw
console.assert('next' in async function* () {}.prototype);
console.assert('next' in function* () {}.prototype);
(function* () {})[Symbol.toStringTag]; // GeneratorFunction
(async function* () {})[Symbol.toStringTag]; // AsyncGeneratorFunction
(async () => {})[Symbol.toStringTag]; // AsyncFunction
Symbol
- Symbol
- 不支持 JSON 序列化
- 通过 replacer 可做特殊处理
- 作为 value 会被处理为 null
- 不能 Transferable
- 不支持 JSON 序列化
- 全局 Symbol
- structuredClone 会保留
- 局部 Symbol/Unique Symbol
- structuredClone 会丢弃
{
// unique
const sym1 = Symbol('description');
const sym2 = Symbol('description');
// 不等
console.assert(sym1 !== sym2);
}
{
// 全局
const sym1 = Symbol.for('description');
const sym2 = Symbol.for('description');
// 等
console.assert(sym1 === sym2);
console.assert(Symbol.keyFor(sym1) === 'description');
}
Symbol | Description | Used by | Since |
---|---|---|---|
Symbol.asyncIterator | 返回对象默认的异步迭代器的方法 | for await...of | Chrome 63+, Safari 12+, Node 10+ |
Symbol.hasInstance | 判断对象是否为某构造函数实例的方法 | instanceof | Chrome 50+, Safari 10+, Node 6+ |
Symbol.isConcatSpreadable | 指示对象是否可展开为数组元素的布尔值 | Array.prototype.concat() | Chrome 38+, Safari 9+, Node 0.12+ |
Symbol.iterator | 返回对象默认迭代器的方法 | for...of | Chrome 38+, Safari 9+, Node 0.12+ |
Symbol.match | 匹配字符串的方法 | String.prototype.match() | Chrome 50+, Safari 10+, Node 6+ |
Symbol.matchAll | 返回所有匹配结果的迭代器的方法 | String.prototype.matchAll() | Chrome 73+, Safari 13+, Node 12+ |
Symbol.replace | 替换字符串中匹配子串的方法 | String.prototype.replace() | Chrome 50+, Safari 10+, Node 6+ |
Symbol.search | 返回字符串中匹配索引的方法 | String.prototype.search() | Chrome 50+, Safari 10+, Node 6+ |
Symbol.species | 用于创建派生对象的构造函数 | - | Chrome 51+, Safari 10+, Node 6.5+ |
Symbol.split | 拆分字符串的方法 | String.prototype.split() | Chrome 50+, Safari 10+, Node 6+ |
Symbol.toPrimitive | 将对象转换为原始值的方法 | - | Chrome 44+, Safari 9+, Node 0.12+ |
Symbol.toStringTag | 用于修改对象的默认描述字符串 | Object.prototype.toString() | Chrome 43+, Safari 9+, Node 0.12+ |
Symbol.unscopables | 定义对象属性在 with 环境中不可见 | - | Chrome 38+, Safari 9+, Node 0.12+ |
Symbol.toStringTag
- Object.prototype.toString()
[object ${@@toStringTag}]