Javascript 是否有必要使用双感叹号(!!)以确保对象不为空?
我最近开始使用双感叹号Javascript 是否有必要使用双感叹号(!!)以确保对象不为空?,javascript,Javascript,我最近开始使用双感叹号在一个对象之前,确保它不是空的,它不是未定义的,也不是空字符串,以确保我包含了变量可以为空的所有不同方式 这有必要吗?例如,它很难阅读: if(!!name)vsif(name) 对此有何看法?我希望我的代码是安全的,不会出现空指针异常和其他情况,但我也希望我的代码是可读的 不,如果在if中使用变量作为条件,则根本不需要双重爆炸。只要if(name)就足以确保name不是虚假值。所有对象引用都是真实的null是错误的。这完全没有必要,除非您需要与布尔值true进行严格比较,
在一个对象之前,确保它不是空的,它不是未定义的,也不是空字符串,以确保我包含了变量可以为空的所有不同方式
这有必要吗?例如,它很难阅读:
if(!!name)
vsif(name)
对此有何看法?我希望我的代码是安全的,不会出现空指针异常和其他情况,但我也希望我的代码是可读的 不,如果在
if
中使用变量作为条件,则根本不需要双重爆炸。只要if(name)
就足以确保name
不是虚假值。所有对象引用都是真实的null
是错误的。这完全没有必要,除非您需要与布尔值true
进行严格比较,例如:
switch (true) {
case foo:
应该是
switch (true) {
case !!foo:
或者,使用冗长但可读性更高的Boolean(foo)
(不要对基本构造函数使用new
)。请注意,反向不是真的,如果您测试的是假值,则会出现问题,因为0、NaN
和空字符串(可能是有效值)是假的:
if (!foo) { // foo had better not be empty string or zero
但是,JavaScript提供了一个包含松散相等性的解决方案(有些人对此表示反对),null
和undefined
彼此松散等效,但不与任何其他虚假值等效:
null == undefined //true
null == NaN // false
undefined == '' // false
完全地,完全地。。。毫无意义,用一个小双关语
if()
自动将条件值转换为布尔值
代码>也将其转换为布尔值
其中
有时用于将某个值强制为布尔值
例如:
var hasElement == !!document.getElementById("zz");
您所做的已经由JavaScript本机完成
if(值){
}
只要值
不是:
- 空的
- 未定义
- 楠
- 空字符串(“”)
- 0
- 假的
javascript是否也对三元运算符执行此操作?例如,如果我有var hasName=name?真:假
hasName=name是赋值,不是布尔测试,而是yes,因为三元数只是根据条件确定要使用的输出,条件以相同的方式计算。