我有以下预配置const preloadedConfig = {
"configA": null, // either true, false or null is allowed};然后我在页面加载时进行以下初始化let finalConfig = preloadedConfig.configA || true;场景:预加载配置中的属性可以根据用户的偏好更改为true、false或null我希望使用短路评估来确定用户对页面加载的选择。如果用户未提供任何选项(null),则默认选项为 true我的问题:基于从这里摘录的以下内容:Falsy 值是那些在布尔上下文中使用时强制为 false 的值,它们是 0、null、未定义、空字符串、NaN,当然还有 false。评估如下:true >> evaluted true // oknull >> evaluted true // okfalse >> evaluted true // the problem area如果用户提供false的配置选项,则最终评估值将始终为 true,因为它是“假值”。如果提供的值为 false,我期望的结果是布尔值false。在使用短路评估并允许 3 种类型的输入值null、true 或 false 的同时,我应该怎么做才能使这项工作正常进行?
3 回答
暮色呼如
TA贡献1853条经验 获得超9个赞
您可以改用nullish 合并运算符。
let finalConfig = preloadedConfig.configA ?? true;
或者,您可以使用hasOwnProperty
支票。
let finalConfig = preloadedConfig.hasOwnProperty('configA') ? preloadedConfig.configA : true;
慕标琳琳
TA贡献1830条经验 获得超9个赞
在现代环境中(或使用转译器),我会使用空合并运算符,仅当左侧为空或未定义时,该运算符才采用右侧:
let finalConfig = preloadedConfig.configA ?? true;
否则,使用条件运算符:
let finalConfig = preloadedConfig.configA == null ? true : preloadedConfig.configA;
FFIVE
TA贡献1797条经验 获得超6个赞
您可以通过使用旧的 Object.assign 或现代的 destruct ... 属性来使默认规则更好一些。
即使为 null,这也会覆盖 configA
const yourConfig = {
configA: true,
...preloadedConfig
}
使用旧的环境会是
Obejct.assign({configA: true},preloadedConfig)
编辑:
将空值作为默认值是
const yourConfig = {
configA: true,
...Object.fromEntries(Object.entries(preloadedConfig).filter(([key,val])=>val!==null))
}
添加回答
举报
0/150
提交
取消