双重否定(x)
双重否定 !!
不是一个独特的 JavaScript 运算符,也不是一个特殊的语法,而只是一个两个否定的序列。它用于将任何类型的值转换为适当的 true
或 false
布尔值,具体取决于它是真实的还是假的。
!!1 // true
!!0 // false
!!undefined // false
!!{} // true
!![] // true
第一个否定将任何值转换为 false
(如果它是真实的) 和 true
(如果是假的) 。然后,第二个否定对正常的布尔值进行操作。他们一起转换任何 truthy 值 true
任何 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
的使用被认为是不好的做法:
- 从风格上看,它可能看起来像一个独特的特殊语法,而实际上除了两个连续的隐式类型转换否定之外,它没有做任何事情。
- 最好通过代码提供有关存储在变量和属性中的值类型的信息。例如,
x !== 0
说x
可能是一个数字,而!!x
并没有向代码的读者传达任何这样的优势。 Boolean(x)
的使用允许类似的功能,并且是类型的更显式转换。