双重否定!!不是唯一的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由于以下原因,使用的做法被认为是不好的做法:
从样式上看,它可能看起来像一种独特的特殊语法,而实际上,除了使用隐式类型转换的两个连续的否定之外,它没有做任何其他事情。
最好通过代码提供有关存储在变量和属性中的值的类型的信息。例如,x !== 0表示x可能是数字,而!!x不会向代码阅读者传达任何此类优势。
用法的使用Boolean(x)允许类似的功能,并且是类型的更明确的转换。