我们可以简化这段代码吗?显示 = 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 显示 == '未定义' ?未定义:!显示的主要内容,如果未能解决你的问题,请参考以下文章
我可以从divide_typeof_helper中检索基本usint吗?