-
我用逻辑或给配置项设默认值,用户明明传了一个合法的 0,却被我当成没传替换成了默认值,因为 || 判断的是假值不是是否缺失,而 0、空字符串、false 都是合法却为假的值的深度复盘
我有个配置项 pageSize,为了用户没配时给默认值 20,写得很顺手:const pageSize = config.pageSize || 20。一直好好的,直到有用户反馈:我把 pageSize 配成了 0(业务里 0 表示不分页、返回全部),系统却还是按 20 分页、我的 0 不生效!一看代码就傻眼:config.pageSize 明明是 0,可 0 || 20 的结果是 20——|| …- 0
- 0
-
我用双等号判断年龄是不是 0,结果表单没填(空字符串)的也被判成了 0,因为 JavaScript 的 == 在背后偷偷做了类型转换:一次 JS 宽松相等隐式转换的深度复盘
我有段校验用 if (user.age == 0) 判断年龄是不是 0,功能大体能用,可线上那些根本没填年龄(user.age 是空字符串 '')的用户也被当成了 0 岁、走进了 0 岁的特殊处理。当我看到 '' == 0 在控制台返回 true 时人都傻了。查清才明白:JS 的 ==(宽松相等)在比较两个不同类型的值时,会先偷偷把它们隐式转换(强制类型转换…- 0
- 0
-
我用数字枚举判断用户角色,结果第一个角色 Admin 怎么判都是"假"、权限全乱了,我对着 TypeScript 数字枚举的几个坑排查了大半天的复盘
用 TS 写权限判断,定义了 enum Role { Admin, User, Guest },很多地方用 if(user.role) 判断有没有角色/是不是某角色,逻辑看着没毛病,线上却出诡异权限 bug:偏偏 Admin 各种判断都被当成"没角色/假值",管理员权限全乱套。盯着代码反复看,Admin 明明是合法枚举值凭什么 if 判断是 false?排查大半天才理解数字枚举…- 0
- 0
-
一个合法的 0 被 || 悄悄吃成了 3000:我在 TypeScript 里因为分不清逻辑或和空值合并而踩的取默认值大坑,以及 || 与 ?? 精确区别的全面复盘
给超时配置随手写了 const timeout = config.timeout || 3000,某个用户合法地把超时设成 0 想表示“不超时”,却被 || 当成假值吃掉、换成了 3000。这篇复盘讲清 || 看的是“真假”而非“有没有值”、会误伤合法的 0/空串/false,以及正解为何是只在 null/undefined 时兜底的空值合并 ??。- 0
- 0
falsy
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!




