为了账号安全,请及时绑定邮箱和手机立即绑定

短路评估并将 true 或 false 分配给变量

短路评估并将 true 或 false 分配给变量

慕森卡 2023-10-14 16:45:01
我有以下预配置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;



查看完整回答
反对 回复 2023-10-14
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

在现代环境中(或使用转译器),我会使用空合并运算符,仅当左侧为空或未定义时,该运算符才采用右侧:

let finalConfig = preloadedConfig.configA ?? true;

否则,使用条件运算符:

let finalConfig = preloadedConfig.configA == null ? true : preloadedConfig.configA;


查看完整回答
反对 回复 2023-10-14
?
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))

}


查看完整回答
反对 回复 2023-10-14
  • 3 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信