JavaScript中变量为undefined时传递替代值的写法是否正确
结论
你的现有写法无法完全达到预期效果,存在两类逻辑问题。
存在的问题
||运算符的判断逻辑不符合需求
JavaScript 中||是逻辑或运算符,规则是返回第一个真值(truthy),所有操作数为假值时返回最后一个假值。它不会专门判断undefined,只要左侧是以下任意假值,都会触发替换为'undefined':null- 数值
0、NaN - 空字符串
'' - 布尔值
false
这就会导致值本身合法但为假值时,被错误替换成'undefined'字符串。
- 存在前置报错风险
代码中直接读取targetGuild.afkChannel.name,如果目标服务器没有设置AFK频道,targetGuild.afkChannel本身为null,这行代码会直接抛出TypeError: Cannot read properties of null (reading 'name'),模板字符串根本无法正常渲染,走不到后续判断afkChannelId的逻辑。
修正方案
根据你的实际需求二选一即可:
- 如果你需要严格仅在值为
undefined时才替换,其他假值(包括null、0、空串等)都保留原值,可参考以下写法:
`**AFK Channel:** ${targetGuild.afkChannel?.name === undefined ? 'undefined' : targetGuild.afkChannel.name}, ${targetGuild.afkChannelId === undefined ? 'undefined' : targetGuild.afkChannelId}`
- 大部分业务场景下,
null和undefined都代表值不存在,如果你希望这两种情况都替换为'undefined',可以用空值合并运算符??(该运算符只会在左侧为null/undefined时才返回右侧值,不会误判0、空串等合法假值),同时用可选链?.规避前置报错:
`**AFK Channel:** ${targetGuild.afkChannel?.name ?? 'undefined'}, ${targetGuild.afkChannelId ?? 'undefined'}`
内容的提问来源于stack exchange,提问作者johng3587
相关产品推荐
相关产品推荐

