JavaScript Logical NOT Operator
JavaScript中的逻辑非(Logical NOT)运算符是一个一元运算符,用感叹号(!)表示。它用于对一个值进行逻辑取反操作,即将真值转换为假值,假值转换为真值。
1 | const a = true; |
这个操作符通常来说是用来操作布尔值的,但是很多时候大家也用它来操作非布尔值,用来操作非布尔值的时候,JS内部会先将对应的值转换为布尔值,然后再进行取反操作。
非布尔值到布尔值的转换规则
JavaScript内部有一套规则用于将非布尔值转化为布尔值,以下值转换为布尔值的时候是false,我们称这些值为falsy values
false0-00n(BigInt的零值)""(空字符串)nullundefinedNaNdocument.all(在某些环境中被视为falsy)
除了falsy values之外的其他值在转换为布尔值时都是true,我们称这些值为truthy values。
true1Hello- …等等
双重逻辑非!!
有时候我们会看到两个感叹号连在一起使用,例如!!value,这是一个常见的技巧,用于将一个值转换为布尔值。第一个感叹号将值取反,第二个感叹号再次取反,从而得到原始值的布尔表示。
1 | const value = "Hello"; |
既然是双重取反操作,那么是不是意味着!!value的结果和value是一致的呢?并不尽然,只有当value是布尔值的时候,!!value的结果才和value一致,如果value是非布尔值,那么!!value的结果就不一定和value一致了。因为类型不一致,如果比较操作用的是严格比较(===),那么结果就是false。
1 | const value = "Hello"; |
还有其他方法吗?
除了使用双重逻辑非(!!)来将一个值转换为布尔值之外,还可以使用Boolean函数:Boolean(value),效果和!!value是一样的。
1 | const value = "Hello"; |
今天是正月初八,祝大家开工大吉!早日实现财富自由!