为什么要使用 if (!!err)?

IT技术 javascript node.js
2021-02-10 13:07:36

在来自sequelize 文档的此代码示例中

if (!!err) {
    console.log('Unable to connect to the database:', err)
} else {
    console.log('Connection has been established successfully.')
}

他们为什么要(!!err)用来测试那个错误的真实性?那不是一样if (err)吗?

3个回答

他们为什么要(!!err)用来测试那个错误的真实性?

没有理由。也许他们过于谨慎,听到了一些关于诚实的错误言论?或者他们想强调在评估条件时发生ToBoolean演员if

那不是一样if (err)吗?

是的。

if (err)
if (Boolean(err))
if (!! err)

都意味着完全相同的事情。后两者仅在达到相同结果之前在两者之间执行不必要的步骤。

双感叹号将任何事物转换为该表达式的布尔表示,无论它在布尔值意义上是真还是假

或者

它将非布尔值转换为反转布尔值

例如定义一个字符串

var vari = "something";

并检查它的布尔等价物

console.log(!!vari);

为什么你的一部分问题

作者或作者可能会过早地检查错误的存在。或者额外检查某个人没有传递表达式而不是需要检查为布尔值的错误。在这两种方式中它都在做同样的事情所以我解释了这意味着你不需要担心为什么现在因为它们是相同的作者意图可以

!! 意图通常是向读者传达代码并不关心变量中的值是什么,而是它的“真实”值是什么。

正如 Bhojendra - C-Link 尼泊尔给出的例子

err = 'This is also to be a true if you convert it to boolean';
if(!!err == 1){
  console.log('test by converting to boolean');
}
if(err == 1){
  console.log('a real boolean test');
}

one 被认为是 true 但 'this sentence' 不等于 1 ,因此如果块将在上面的代码中执行,则仍然为 true

@ Bhojendra-C-LinkNepal -什么valueerrif (err)产生不同的结果if (!!err)只有这样才能回答问题。
2021-03-16 13:07:36
正如贝尔吉的回答所示,这个答案不是问题的答案。它是关于 的信息!!,但不是问题的答案。
2021-03-18 13:07:36
@jfriend00 不。这也可能是一个错误的条件。但是 if(err) 是一个真条件
2021-03-24 13:07:36
我认为这不能回答问题,因为不会if (err)产生与if (!!err)? 所以,我们仍然想知道“为什么要使用 if (!!err)?”
2021-03-28 13:07:36
我同意。ifif (null)仍然为假语句的上下文中似乎没有必要
2021-04-05 13:07:36

同样的事情真的很重要。

可是等等!当我们用来测试真假时,情况真的很不一样:

err = 'This is also to be a true if you convert it to boolean';
if(!!err == 1){
  console.log('test by converting to boolean');
}
if(err == 1){
  console.log('a real boolean test');
}

//outputs only: test by converting to boolean

但是一个真正的布尔值记录两者,如下例所示:

err = true;
if(!!err == 1){
  console.log('test by converting to boolean');
}
if(err == 1){
  console.log('a real boolean test');
}

所以双感叹号仅用于转换为布尔值。

因此,人们使用条件来确保值是否为布尔值,如果不是,则将其转换并检查它,但如果他想严格检查它是否为真,那么他将1 === 1 在上面的示例中完全比较 using和同样的事情正在被应用。

但就像在你的代码if(!!err){中用于确保它是假的或真的一样,因为缺乏深入的知识,if(err){//string甚至可以被检查为真或假。

而已。确切的检查是由!!.

您共享有关信息!!,但不回答关于为什么它是在上下文中使用的问题if (!!err)这不是问题的答案。人们需要注意被问到的问题。!!已经有很多关于这里的信息stackoverflow.com/questions/784929/...
2021-03-17 13:07:36
== 1东西和这个问题有什么关系?你为什么要比较一个布尔值和数字 1 呢?
2021-03-21 13:07:36
是的,这就是我的观点,很好的例子@Bhojendra(Y),我希望你也能把这个东西添加到我的答案中
2021-03-26 13:07:36
@AB 请随时结合我的回答。
2021-04-06 13:07:36
实际上他已经提供了真正的原因 wbout “为什么” 部分你的回答和我一样,你可以仔细看看这个例子。你会知道他想说什么
2021-04-11 13:07:36