JS逻辑或(||)与控制合并运算符(??)

50 阅读1分钟

逻辑或(||)

  • 从左到右进行运算,除非右边的运算符优先级高于||
  • 属于布尔逻辑运算符,左侧的操作数会被强制转换为布尔值,任何的假值(0,'',NaN,false等)都会被视为false 0||''||NaN||false||true都只会返回true值

控制合并运算符(??)

  • 从左到右运算
  • 属于逻辑运算符,只有当左侧为null或者undefined的时候才会返回右侧,因此
0??123 //返回 0
''??123 //返回 ‘’
NaN??123 //返回 NaN
false??123 //返回 false
true??123 //返回 true
null??123  //返回123
undefined??123 //返回 123
  • 因此,可以将控制合并运算符(??)当作逻辑运算符(||)的一个特列
  • 在需要将 0||''||NaN||false 作为有效返回值的时候不能用||而应该使用??

注意

  • 不能将 ?? 直接与逻辑与(&&)和逻辑或(||)运算符组合使用,如:
null || undefined ?? "foo"; // 抛出 SyntaxError
true && undefined ?? "foo"; // 抛出 SyntaxError
  • 假如需要将??直接与||或者&&组合使用则需要添加括号()来表示优先级:
(null || undefined) ?? "foo"; // 返回“foo”
(false && undefined) ?? "foo"; // 返回 false
  • 使用??需要考虑浏览器的兼容性 image.png

参考