Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有必要使用双感叹号(!!)以确保对象不为空?_Javascript - Fatal编程技术网

Javascript 是否有必要使用双感叹号(!!)以确保对象不为空?

Javascript 是否有必要使用双感叹号(!!)以确保对象不为空?,javascript,Javascript,我最近开始使用双感叹号在一个对象之前,确保它不是空的,它不是未定义的,也不是空字符串,以确保我包含了变量可以为空的所有不同方式 这有必要吗?例如,它很难阅读: if(!!name)vsif(name) 对此有何看法?我希望我的代码是安全的,不会出现空指针异常和其他情况,但我也希望我的代码是可读的 不,如果在if中使用变量作为条件,则根本不需要双重爆炸。只要if(name)就足以确保name不是虚假值。所有对象引用都是真实的null是错误的。这完全没有必要,除非您需要与布尔值true进行严格比较,

我最近开始使用双感叹号
在一个对象之前,确保它不是空的,它不是未定义的,也不是空字符串,以确保我包含了变量可以为空的所有不同方式

这有必要吗?例如,它很难阅读:
if(!!name)
vs
if(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,因为三元数只是根据条件确定要使用的输出,条件以相同的方式计算。