【发布时间】:2015-12-16 19:34:41
【问题描述】:
根据 JavaScript 中的“严格模式”,您应该在比较 if 语句中的值时使用 ===。但是,在处理真值/假值时,这可能会导致很长的 if 语句:
if (a !== null && a !== undefined && a !== '' && a !== 0) {}
为了解决这个问题,我开始使用!!
if(!!a === true) {}
将值转换为布尔值。但是,我担心会影响性能。根据我的 JSPerf (http://jsperf.com/double-exclamation-vs-falsy/4),这种方法比长形式的 if 语句慢 30%。
我在这里离基地很远吗?有其他人注意到性能下降吗?
【问题讨论】:
-
很少需要与
true或false进行显式比较。只需if (a)即可。 -
如果使用
!!,则不需要=== true或=== false -
@PatrickEvans 如果不进行比较,也不需要
!!。 -
理论上
==的性能较差,因为它需要类型强制。但是!!a基本上做了 JS 会做的事情,如果你使用==(即将操作数转换为布尔值)。 -
if (a)在严格模式下绝对完全可以。事实上,使if (!!a === true)工作的完全相同的行为是使普通旧if (a)工作的原因 -!应用程序中的隐式真实性测试与@中的真实性测试完全相同相同987654340@.
标签: javascript performance if-statement boolean