js中!、!!、.?、??、??=、的用法和含义
在 JavaScript 中,!
、!!
、.?
、??
和 ??=
都是具有特定含义的操作符或语法。下面是它们的用法和含义:
1. !
(逻辑非)
- 含义:
!
是一个一元操作符,用于对布尔值取反。如果操作数可以被转换为true
,则结果为false
;反之亦然。 - 示例:
let x = false; console.log(!x); // 输出: true let y = 0; // 在布尔上下文中,0 被视为 false console.log(!y); // 输出: true
2. !!
(双重否定)
- 含义:
!!
常用来将任何类型的值转换为布尔值。第一次!
将值转为布尔值并取反,第二次!
再次取反,从而得到原始值对应的布尔值。 - 示例:
let str = "hello"; console.log(!!str); // 输出: true let num = 42; console.log(!!num); // 输出: true let emptyObj = {}; console.log(!!emptyObj); // 输出: true let nullValue = null; console.log(!!nullValue); // 输出: false
3. .?
(可选链操作符)
- 含义:
.?
允许你在访问深层嵌套属性时安全地处理可能存在的null
或undefined
。如果在链中的某个点遇到了null
或undefined
,表达式会立即返回undefined
而不是抛出错误。 - 示例:
let user = { name: "Alice", address: { street: "Main St" } }; console.log(user?.address?.street); // 输出: "Main St" console.log(user?.address?.city); // 输出: undefined console.log(user?.profile?.bio); // 输出: undefined
4. ??
(空值合并操作符)
- 含义:
??
提供了一种从一组候选值中选择第一个非null
和非undefined
的值的方式。如果左侧的操作数是null
或undefined
,那么它会选择右侧的操作数。 - 示例:
let value1 = null; let value2 = "default"; console.log(value1 ?? value2); // 输出: "default" let value3 = ""; console.log(value3 ?? "empty"); // 输出: "" (因为空字符串是非 null 和非 undefined 的)
5. ??=
(空值合并赋值操作符)
- 含义:
??=
操作符用于当变量为null
或undefined
时,给变量赋一个新的值。如果左侧的操作数不是null
或undefined
,则不会执行赋值。 - 示例:
let value1 = null; value1 ??= "default"; console.log(value1); // 输出: "default" let value2 = "existing"; value2 ??= "fallback"; console.log(value2); // 输出: "existing" (因为 value2 已经有值)
这些操作符在现代 JavaScript 编程中非常有用,可以帮助你编写更简洁和安全的代码。