我们可以简化这段代码吗?显示 = typeof 显示 == '未定义' ?未定义:!显示

Posted

技术标签:

【中文标题】我们可以简化这段代码吗?显示 = typeof 显示 == \'未定义\' ?未定义:!显示【英文标题】:Can we simplified this code? show = typeof show == 'undefined' ? undefined : !show我们可以简化这段代码吗?显示 = typeof 显示 == '未定义' ?未定义:!显示 【发布时间】:2021-11-16 11:05:33 【问题描述】:
function myToggle(show) 
    //...bunch of codes here...

    show = typeof show == 'undefined' ? undefined : !show
    $(el).toggleClass('d-none', show )

在上面的函数中,show 只有在它被定义时才会被反转(布尔值),然后传递给 jQuery 的 toggleClass()。 d-none 是一个用于隐藏元素的 Bootstrap 类。

所以当:

myToggle()    //this will toggle class d-none to the element
myToggle(1)   //this will remove class d-none from the element
myToggle(0)   //this will give class d-none to the element

所以我的问题是,我们可以简化这段代码吗?

show = typeof show == 'undefined' ? undefined : !show

【问题讨论】:

【参考方案1】:

让我们从这应该是=== 开始,而不仅仅是==。在 JS 中您几乎永远不需要 ==(它不是 Java 或 C++,总是使用 ===,除非您实际上知道为什么不应该)。这样,您就不需要检查typeof:直接检查您的变量是否为undefined

show = show === undefined? show : !show;

但是,这会忽略how jQuery's .toggleClass() even works。它不采用“真假或未定义”作为第二个参数,它采用布尔值,并且“显示”的意图非常明确,因此 real 简化是最明显的一个:

show = !!show;

【讨论】:

您的第一个代码是正确的。谢谢提醒===。我认为这是最短的解决方案。至于您的第二个代码,如果我们没有传递参数,它将是 true 而不是 undefined。在 jQuery 中,toggleClass('A', undefined) 将被视为 toggleClass('A') 而不是 toggleClass('A', false) 您所展示的内容称为“二传手”。不,先生,它真的是一个切换。如果没有传递参数,它将切换。 当然,帖子已更新。然而,you 所展示的应该是一个 setter:当 jQuery 十年前引入它时,用 setter 重载切换是一个糟糕的 API 决定,而今天它仍然是糟糕的编程。切换(多年来甚至不需要 jQuery,classList 已经有 .add/.remove/.toggle 很长时间了)或显式设置值。不要依赖undefined 触发不同的 API 行为

以上是关于我们可以简化这段代码吗?显示 = typeof 显示 == '未定义' ?未定义:!显示的主要内容,如果未能解决你的问题,请参考以下文章

如何增加“chrome 推送通知”的可见时间?

我可以从divide_typeof_helper中检索基本usint吗?

这段代码可以编译吗? [复制]

我可以简化这个 for 循环吗?

显示自定义字段打击产品标题 Woocommerce 产品单页

如何在 R 图中显示显着的 p 值