23

在 angular.js 中,有一些代码片段用于!!检查 if 条件下的值是否为真。

这是最佳实践吗?我完全理解返回值或其他分配!用于确保类型为布尔值。但是条件检查也是如此吗?

if (!!value) {
  element[name] = true;
  element.setAttribute(name, lowercasedName);
} else {
  element[name] = false;
  element.removeAttribute(lowercasedName);
}

4

2 回答 2

49

!!value通常被用作强制value成为trueor的一种方式false,分别取决于它是真还是假。

在诸如if (value) { ... }or之类的控制流语句中while (value) { ... },前缀valuewith!!没有任何作用,因为根据定义,控制流语句已经将 强制valuetrueor false。三元运算符表达式中的条件也是如此value ? a : b

使用!!valueto coerce valueto trueorfalse是惯用的,但当然应该只在随附的语言结构没有使其冗余时才使用。

于 2014-11-13T19:42:11.280 回答
45

不,!!在某种情况下完全没用if,只会让读者感到困惑。

转换为truein的值!!value也通过了if测试,因为它们是true在布尔上下文中评估的值,它们被称为"truthy"

所以只需使用

if (value) {
于 2014-11-13T10:12:51.700 回答