JavaScript 双重否定(!! x)

示例

双重否定!!不是唯一的JavaScript运算符,也不是特殊的语法,而仅仅是两个否定的序列。它用于将任何类型的值转换为适当的值true或false布尔值,具体取决于它是true还是falsy

!!1            // 真正
!!0            // 假
!!undefined    // 假
!!{}           // 真正
!![]           // 真正

首先否定任何值转换为false它是否truthy以及true如果是falsy。然后,第二个否定运算将对普通布尔值进行运算。他们一起转换任何truthy值true和任何falsy价值false。

但是,许多专业人士认为使用这种语法的做法是不可接受的,因此即使编写的时间更长,也建议阅读起来更简单:

x !== 0        // 如果x是数字,则代替!! x
x != null      // 如果x是对象,字符串或未定义,则代替!! x

!!x由于以下原因,使用的做法被认为是不好的做法:

  1. 从样式上看,它可能看起来像一种独特的特殊语法,而实际上,除了使用隐式类型转换的两个连续的否定之外,它没有做任何其他事情。

  2. 最好通过代码提供有关存储在变量和属性中的值的类型的信息。例如,x !== 0表示x可能是数字,而!!x不会向代码阅读者传达任何此类优势。

  3. 用法的使用Boolean(x)允许类似的功能,并且是类型的更明确的转换。