为什么使用if(!! err)?
在这个来自sequizeize文档的代码示例中:
if (!!err) { console.log('Unable to connect to the database:', err) } else { console.log('Connection has been established successfully.') }
为什么他们使用(!!err)
来检验错误的真实性? 和if (err)
不一样吗?
为什么他们使用
(!!err)
来检验错误的真实性?
没有理由 也许他们是小心翼翼的,听到一些关于呕吐的错误的事情? 或者他们想强调在if
条件的评估中发生的ToBoolean
?
和
if (err)
不一样吗?
是。
if (err) if (Boolean(err)) if (!! err)
都意味着完全一样的东西。 后两者只能在达到相同的结果之前在两者之间做不必要的步骤。
双重感叹号将任何东西都转换为该expression式的布尔表示forms,无论是布尔值的意义上的true还是false
要么
它将一个非boolean转换为一个颠倒的布尔值
例如定义一个string
var vari = "something";
并检查其布尔等效
console.log(!!vari);
为什么你的一部分问题
作者或作者可能会过早检查是否存在错误。 或者有一个额外的检查,一个不是传递一个expression式而不是错误,需要检查为布尔值。 在两个方面它是做同样的事情所以我解释了这意味着你不需要担心为什么现在,因为他们是相同的作者意图可以
! 意图通常是向读者传达,代码不在乎variables中的值是什么,而是“真值”是什么。
正如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'); }
一个被认为是正确的,但是“这个句子”不等于1,所以如果在上面的代码中将执行块,那么仍然是真的
这真的是同样的事情。
可是等等! 当我们用来testing真或假的时候真的是不同的东西:
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
但是一个真正的布尔值会logging下来,如下例所示:
err = true; if(!!err == 1){ console.log('test by converting to boolean'); } if(err == 1){ console.log('a real boolean test'); }
所以双重感叹号被用来转换为一个布尔值只。
所以,人们使用这个条件来确定这个值是否在布尔值中,如果不是,那么将它转换并检查,但是如果他想严格检查是否为真,那么他会使用1 === 1
和在上面的例子中,正在应用完全相同的东西。
但是就像在你的代码中一样if(!!err){
因为缺乏深入的知识,可以确保它是错误的或真实的, if(err){//string
甚至可以被检查为真或假。
而已。 完全检查是由!!
。