双重否定(x)

双重否定 !! 不是一个独特的 JavaScript 运算符,也不是一个特殊的语法,而只是一个两个否定的序列。它用于将任何类型的值转换为适当的 truefalse 布尔值,具体取决于它是真实的还是假的

!!1            // true
!!0            // false
!!undefined    // false
!!{}           // true
!![]           // true

第一个否定将任何值转换为 false(如果它是真实的)true(如果是假的) 。然后,第二个否定对正常的布尔值进行操作。他们一起转换任何 truthytrue 任何 falsy 价值 false

但是,许多专业人士认为使用这种语法的做法是不可接受的,并建议更简单的阅读替代方案,即使他们写的时间更长:

x !== 0        // instead of !!x in case x is a number
x != null      // instead of !!x in case x is an object, a string, or an undefined

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

  1. 从风格上看,它可能看起来像一个独特的特殊语法,而实际上除了两个连续的隐式类型转换否定之外,它没有做任何事情。
  2. 最好通过代码提供有关存储在变量和属性中的值类型的信息。例如,x !== 0x 可能是一个数字,而 !!x 并没有向代码的读者传达任何这样的优势。
  3. Boolean(x) 的使用允许类似的功能,并且是类型的更显式转换。