# JavaScript 中 ?? 和 || 的差别 `??` 和 `||` 都是用于判断返回值的运算符,但它们有一些区别: ### 相同点 - 用法相同,都是前后是值,中间用符号连接。根据前面的值来判断最终返回前面的值还是后面的值。 - `值1 ?? 值2` - `值1 || 值2` ### 不同点 判断方式不同: 使用 `??` 时,只有当 **值1** 为 `null` 或 `undefined` 时才返回 **值2**;[4] 使用 `||` 时,**值1** 会转换为布尔值判断,为 `true` 返回 **值1**,`false` 返回 **值2**[4] ```javascript // ?? undefined ?? 2 // 2 null ?? 2 // 2 0 ?? 2 // 0 "" ?? 2 // "" true ?? 2 // true false ?? 2 // false // || undefined || 2 // 2 null || 2 // 2 0 || 2 // 2 "" || 2 // 2 true || 2 // true false || 2 // 2 ``` 总的来说,`??` 更加适合在不知道变量是否有值时使用。[4] ## C# 中 & 和 && 的差别 在 C# 中,`&` 和 `&&` 都表示与操作,区别是: - `&&` 只要第一个条件不满足,后面条件就不再判断。 - `&` 要对所有的条件都进行判断。[3] `&` 可以用作位运算符,当 `&` 两边的表达式不是 Boolean 类型的时候,`&` 表示按位操作。[3] ## C# 中 | 和 || 的差别 在 C# 中,`|` 和 `||` 都表示或操作,区别是: - `||` 只要第一个条件满足,后面条件就不再判断。 - `|` 要对所有的条件都进行判断。[3] `|` 可以用作位运算符,当 `|` 两边的表达式不是 Boolean 类型的时候,`|` 表示按位操作。[3] 总之,`&&` 和 `||` 是短路运算符,只要能够确定结果就不再计算后面的条件。而 `&` 和 `|` 则会计算所有条件。 Citations: [1] https://www.runoob.com/note/34429 [2] https://hackmd.io/%40wsp50317/rygXrgxoB [3] https://www.cnblogs.com/renlinsen/p/14079571.html [4] https://blog.csdn.net/weixin_41650390/article/details/113739845 [5] https://learn.microsoft.com/zh-tw/dotnet/csharp/language-reference/operators/boolean-logical-operators