-
我给一个公共库里的方法把可选参数的默认超时从 30 秒改成了 60 秒只重新编译发布了这个库的 dll、本以为所有调用方不用动就自动用上新默认值,结果线上一查那些没重新编译的调用方还在用 30 秒的旧默认,排查很久才搞懂 C# 里可选参数的默认值是编译时常量早被内联进了调用方的程序集里的深度复盘
我维护一个被很多服务依赖的公共库、里面有个方法带一个可选参数 Send(Request req, int timeoutSeconds = 30),调用方本来 Send(req) 用默认。后来发现 30 秒超时太短我把库里默认值改成 60 秒重新编译发布了库的新版 dll,以为所有调用 Send(req) 的地方不用改任何代码甚至不用重新编译只要换上新 dll 就自动用上 60 秒。结果上线后:重…- 2
- 0
-
我给函数参数和解构都设了默认值,以为这下不管传什么进来都有兜底了,结果一个从接口来的 null 直接穿透了默认值、拿到手还是 null、访问属性当场崩溃,排查半天才发现默认值只认 undefined、根本不认 null 的深度复盘
我写了个 TypeScript 函数接收配置对象,为了健壮给参数和解构都加了默认值,心想无论传不传、传什么都有兜底绝不会出问题。本地用 undefined、不传参数测了一圈默认值都生效,我便放心了。可上线后偏偏崩在我自以为最稳的地方:一个从后端接口返回的字段是 null 被当参数传进来,我设的默认值完全没生效,参数拿到的就是那个 null,紧接着属性访问当场崩溃 Cannot read prope…- 0
- 0
-
我用逻辑或给配置项设默认值,用户明明传了一个合法的 0,却被我当成没传替换成了默认值,因为 || 判断的是假值不是是否缺失,而 0、空字符串、false 都是合法却为假的值的深度复盘
我有个配置项 pageSize,为了用户没配时给默认值 20,写得很顺手:const pageSize = config.pageSize || 20。一直好好的,直到有用户反馈:我把 pageSize 配成了 0(业务里 0 表示不分页、返回全部),系统却还是按 20 分页、我的 0 不生效!一看代码就傻眼:config.pageSize 明明是 0,可 0 || 20 的结果是 20——|| …- 0
- 0
-
一个合法的 0 被 || 悄悄吃成了 3000:我在 TypeScript 里因为分不清逻辑或和空值合并而踩的取默认值大坑,以及 || 与 ?? 精确区别的全面复盘
给超时配置随手写了 const timeout = config.timeout || 3000,某个用户合法地把超时设成 0 想表示“不超时”,却被 || 当成假值吃掉、换成了 3000。这篇复盘讲清 || 看的是“真假”而非“有没有值”、会误伤合法的 0/空串/false,以及正解为何是只在 null/undefined 时兜底的空值合并 ??。- 2
- 0
默认值
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!




