JavaScript – 小技巧 Tips
1e6 等价于 1 + 后面 6 个零
console.log(1e6 === 1_000_000);
模拟 C# 的 Record Deconstruct
class Size implements Iterable<number> { constructor( public width : number, public height: number ) {} *[Symbol.iterator]() { yield this.width; yield this.height } } const size = new Size(100, 200); const [width, height] = size; // 100, 200
利用 Iterable 可以让对象支持 Array 式 的 Deconstruct.
property 数量可控的情况下,这种方式会比 Object 式 的 Deconstruct 容易重命名。
TypeScript 类型的问题
虽然 Generator 可以让对象具有 Deconstruct 的能力,但是类型却并不是 Tuple。
上面例子中碰巧 width 和 height 都是 number 所以才可以这样写,如果是不同类型还是得写 deconstruct 方法。
像下面这样, firstName 的类型会是 string | number
const person = { firstName : 'Derrick', lastName : 'Yam', age: 11, *[Symbol.iterator]() { yield this.firstName; yield this.lastName; yield this.age; } } const [firstName, lastName, age] = person;
我们只能另外写一个方法了
const person = { firstName : 'Derrick', lastName : 'Yam', age: 11, deconstruct() { return [this.firstName, this.lastName, this.age] as const; } } Object.defineProperty(person, 'deconstruct', { enumerable: false });
Conditional add Property
function doSomething(num?: number) { const obj = { str: '', ...(num !== undefined && { num }), }; console.log(obj); } doSomething(); // { str: '' } 没有 num 属性
分类:
(新) JavaScript
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体