Firebase中判断User模型username字段是否存在且非空的问题
逻辑错误原因
- 两次编写的判断都使用了*或(||)*运算符,只要任意一个条件成立就会触发执行,完全不符合「两个条件同时满足才执行」的需求
- 第一次的
if (username || username != "")中,当username为undefined时,username != ""的结果为true,因此整个判断条件成立,错误触发执行 - 第二次调整后的
if (username != undefined || username != "")仍存在逻辑问题:undefined满足username != "",空字符串满足username != undefined,两种非法场景都会触发判断成立
正确判断写法
写法1:严谨可读的写法(推荐)
要求同时满足「字段存在(不为undefined)」、「值不为空字符串」两个条件,使用严格比较避免隐式类型转换的异常:
if (username !== undefined && username !== "") { // 执行展示内容的逻辑 }
写法2:简洁写法
如果可以确认username的取值只有你提到的三种状态(undefined、空字符串""、有效非空用户名),可以直接利用JS的真值判定规则简化代码:
if (username) { // 执行展示内容的逻辑 }
undefined和空字符串在JS中都是假值,非空字符串为真值,因此这个写法可以直接覆盖所有场景的判断。
内容的提问来源于stack exchange,提问作者Gurmukh Singh
相关产品推荐
相关产品推荐

