在来自sequelize 文档的此代码示例中:
if (!!err) {
console.log('Unable to connect to the database:', err)
} else {
console.log('Connection has been established successfully.')
}
他们为什么要(!!err)
用来测试那个错误的真实性?那不是一样if (err)
吗?
在来自sequelize 文档的此代码示例中:
if (!!err) {
console.log('Unable to connect to the database:', err)
} else {
console.log('Connection has been established successfully.')
}
他们为什么要(!!err)
用来测试那个错误的真实性?那不是一样if (err)
吗?
他们为什么要
(!!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
同样的事情真的很重要。
可是等等!当我们用来测试真假时,情况真的很不一样:
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
甚至可以被检查为真或假。
而已。确切的检查是由!!
.