【发布时间】:2015-01-31 04:40:03
【问题描述】:
在此代码示例中来自sequlize docs:
if (!!err) {
console.log('Unable to connect to the database:', err)
} else {
console.log('Connection has been established successfully.')
}
他们为什么要使用(!!err) 来测试这个错误的真实性?不是和if (err)一样吗?
【问题讨论】:
-
据我所知是一样的...
-
是的,检查真实性是一样的。我想这只是人们在条件表达式中测试一个实际的布尔值而不是让解释器为他们强制它。恕我直言,除非您想显式返回布尔值(例如
return !!err;),否则!!是多余的。 -
不太一样... err 是一个对象。 !!将其转换为反转的布尔值,然后再次反转布尔值......如果它是假的(例如 0、null、未定义等),它将是假的,否则为真。所以 !!不是运算符,它只是 !运算符两次。
-
它在
if语句中没有任何作用,任何真实的东西都会触发 if 块。 -
这个问题不是stackoverflow.com/questions/784929/…的重复问题。该问题提供了有关
!!语法及其作用的信息,但没有解释为什么在 OP 的问题中使用它。这是另一个问题,事实证明答案是在 OP 的代码示例中不需要该语法,因为if (err)和if (!!err)生成相同的逻辑。
标签: javascript node.js