如何设置函数参数在undefined、null、空字符串时的默认值及null与'null'区别
问题解决方案
原代码错误原因
你写的判断逻辑typeof colorX !== ('undefined' || 'null' || '')本身存在运算逻辑错误:
JS 中||逻辑或运算符是短路求值规则,会返回第一个真值,'undefined'是非空字符串属于真值,所以括号内的表达式最终运算结果只有'undefined',整个判断等价于typeof colorX !== 'undefined',自然只能匹配到undefined的场景。
另外你用typeof判断空值本身也存在偏差:typeof null返回值是'object',typeof ''返回值是'string',永远不可能等于'undefined',所以这两类值不会触发默认值赋值。
修复方案
如果要精准匹配undefined、null、空字符串三种场景,不会误伤0、false等其他合法假值,推荐用数组includes判断:
// 仅匹配undefined、null、空字符串 colorX = [undefined, null, ''].includes(colorX) ? 'abc' : colorX;
如果需要额外把字符串'null'也纳入触发默认值的范围,直接把值加到判断数组里即可:
// 额外匹配字符串'null' colorX = [undefined, null, '', 'null'].includes(colorX) ? 'abc' : colorX;
如果你的业务场景里不需要保留0、false这类假值,也可以用更简单的逻辑或简写:
// 所有假值都会触发默认值,包括0、false、NaN等 colorX = colorX || 'abc';
null 和 'null' 的区别
- null是JS内置的原始类型空值,代表主动声明的无值状态,属于JS假值之一,
typeof null返回值为'object' - 'null'是普通字符串类型,内容为
n/u/l/l四个字符,非空字符串属于真值,typeof 'null'返回值为'string',仅在主动传值、接口返回字符串格式空值等场景下会出现
内容的提问来源于stack exchange,提问作者Srinivas Naik
相关产品推荐
相关产品推荐

