我最近开始在对象之前使用双惊叹号!!
来确保它不是null并且它不是未定义的而不是空字符串,以确保我包含所有不同的方式变量可以为空。
这有必要吗?例如,它很难阅读:
if(!!name)
vs if(name)
对此有何看法?我希望我的代码是安全的,而不是进入可能发生空指针异常和其他事情的条件,但我也希望我的代码可读。
答案 0 :(得分:4)
不,如果您将变量用作if
中的条件,则根本不需要双重爆炸。只需if (name)
就可以确保name
不是 falsy 值。所有对象引用都是真实的; null
是假的。
答案 1 :(得分:3)
除非您需要与布尔true
进行严格比较,否则完全没有必要,例如:
switch (true) {
case foo:
应该是
switch (true) {
case !!foo:
或者替代地,详细但更具可读性Boolean(foo)
(不要将new
与原始构造函数一起使用)。请注意,相反的情况并非如此,如果您正在测试falsey值,那么它就会成为问题,因为0,NaN
和空字符串(可能是有效值)都是假的:
if (!foo) { // foo had better not be empty string or zero
然而,JavaScript为你提供了一个(有些皱眉)涉及松散的平等,null
和undefined
彼此松散等同但不与任何其他假名值:
null == undefined //true
null == NaN // false
undefined == '' // false
答案 2 :(得分:2)
您正在做的事情已经由JavaScript本地完成。
if( value ) {
}
value
不是,就会评估为真。
答案 3 :(得分:1)
完全和完全......毫无意义,使用小双关语。
if()
自动将条件值转换为布尔值。
!!
也将它转换为布尔值。
有时使用!!
的地方是强迫boolean
值。
如:
var hasElement == !!document.getElementById("zz");