Why use if (!!err)?
在Sequize文档的代码示例中:
1 2 3 4 5 | if (!!err) { console.log('Unable to connect to the database:', err) } else { console.log('Connection has been established successfully.') } |
他们为什么用
Why are they using
(!!err) to test that err's truthiness?
没有理由。也许他们太过谨慎了,听说了一些关于穿透力的错误消息?或者他们想强调在评估
Isn't that the same as
if (err) ?
对。
1 2 3 | if (err) if (Boolean(err)) if (!! err) |
所有这些都意味着完全相同的事情。后两种方法在得到相同的结果之前只做了不必要的步骤。
双感叹号将任何事物转换为该表达式的布尔表示形式,无论它在布尔值意义上是真是假
或
它将非布尔值转换为反向布尔值
例如,定义一个字符串
1 | var vari ="something"; |
并检查其布尔等效值
1 | console.log(!!vari); |
为什么你的部分问题
作者或作家可能过于早熟,无法检查错误的存在。或者额外检查是否有人没有传递表达式,而不是需要作为布尔值检查的错误。在这两方面,它都是做同样的事情,所以我解释了它意味着你不必担心为什么现在它们是一样的。作者的意图可以是
!! intent is usually to convey to the reader that the code does not care
what value is in the variable, but what it's"truth" value is.
如Bhojendra-C-Link Nepal所示
1 2 3 4 5 6 7 | 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'); } |
一个被认为是真的,但"这个句子"不等于1,所以如果块将在上面的代码中执行,仍然是真的。
这真的很重要。
但是,等等!当我们用它来测试对与错时,情况就完全不同了:
1 2 3 4 5 6 7 8 9 | 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 |
但真正的布尔值记录如下所示:
1 2 3 4 5 6 7 | err = true; if(!!err == 1){ console.log('test by converting to boolean'); } if(err == 1){ console.log('a real boolean test'); } |
因此,双感叹号仅用于转换为布尔值。
因此,人们使用条件来确保值是否为布尔值,如果不为布尔值,则转换并检查它,但如果他希望严格检查是否为真,则将使用
但是就像在代码中一样,由于缺乏深入的知识,
就是这样。由