0%

javascript-operator-logical-not

JavaScript Logical NOT Operator

JavaScript中的逻辑非(Logical NOT)运算符是一个一元运算符,用感叹号(!)表示。它用于对一个值进行逻辑取反操作,即将真值转换为假值,假值转换为真值。

1
2
3
4
const a = true;
const b = false;
console.log(!a); // 输出: false
console.log(!b); // 输出: true

这个操作符通常来说是用来操作布尔值的,但是很多时候大家也用它来操作非布尔值,用来操作非布尔值的时候,JS内部会先将对应的值转换为布尔值,然后再进行取反操作。

非布尔值到布尔值的转换规则

JavaScript内部有一套规则用于将非布尔值转化为布尔值,以下值转换为布尔值的时候是false,我们称这些值为falsy values

  • false
  • 0
  • -0
  • 0n(BigInt的零值)
  • ""(空字符串)
  • null
  • undefined
  • NaN
  • document.all(在某些环境中被视为falsy)

除了falsy values之外的其他值在转换为布尔值时都是true,我们称这些值为truthy values

  • true
  • 1
  • Hello
  • …等等

双重逻辑非!!

有时候我们会看到两个感叹号连在一起使用,例如!!value,这是一个常见的技巧,用于将一个值转换为布尔值。第一个感叹号将值取反,第二个感叹号再次取反,从而得到原始值的布尔表示。

1
2
3
4
5
const value = "Hello";
console.log(!!value); // 输出: true

const emptyString = "";
console.log(!!emptyString); // 输出: false

既然是双重取反操作,那么是不是意味着!!value的结果和value是一致的呢?并不尽然,只有当value是布尔值的时候,!!value的结果才和value一致,如果value是非布尔值,那么!!value的结果就不一定和value一致了。因为类型不一致,如果比较操作用的是严格比较(===),那么结果就是false。

1
2
3
4
5
const value = "Hello";
console.log(!!value === value); // 输出: false

const boolValue = true;
console.log(!!boolValue === boolValue); // 输出: true

还有其他方法吗?

除了使用双重逻辑非(!!)来将一个值转换为布尔值之外,还可以使用Boolean函数:Boolean(value),效果和!!value是一样的。

1
2
3
4
5
const value = "Hello";
console.log(Boolean(value)); // 输出: true

const emptyString = "";
console.log(Boolean(emptyString)); // 输出: false

今天是正月初八,祝大家开工大吉!早日实现财富自由!