Published on

JavaScript 中的空合并运算符

空合并运算符 ( ?? ) 是 ES2020 中引入的一个逻辑运算符,当其左侧操作数为 nullundefined

这是一个逻辑运算符,它的返回值是 truefalse

它与逻辑 OR (||) 运算符不同,后者返回第一个为 true 的值。

示例

const foo = null ?? 'default string'

console.log(foo)
// 期望输出: "default string"
const foo = 0 ?? 42

console.log(foo)
// 期望输出: 0

如果左边的值为 false,则 || 可能会产生一些问题,例如 0''

const foo = 0 || 42
console.log(foo) // 42

const bar = 0 ?? 42
console.log(bar) // 0

|| 不同的是, ?? 不返回第一个为 true 的值,仅当左侧值为 nullundefined 时,它才返回右侧值。

const foo = '' || 'default string'
console.log(foo) // 'default string'

const bar = '' ?? 'default string'
console.log(bar) // ''

const baz = undefined ?? 'default string'
console.log(baz) // 'default string'

用法

如果变量是 nullundefined,当想要返回默认值时,空合并运算符非常有用。

const [result, setResult] = useState(null)

useEffect(() => {
  fetch('https://www.bing.com/search?q=hello')
    .then((response) => response.json())
    .then((json) => setResult(json))
}, [])

return <div>{result ?? 'Loading...'}</div>

在此示例中,调用 API 获取数据,如果数据尚未加载,就显示一条加载消息。

使用 React 和 TypeScript 时,采用以下类型:

type User = {
  name: string
  happy: boolean | null
}

export const User = ({ user }: { user: User }) => {
  return (
    <div>
      <h1>{user.name}</h1>
      {user.happy ?? 'Unknown'}
    </div>
  )
}

在此示例中,显示了用户的姓名以及他们是否高兴。如果用户的幸福感是 null ,期望结果是 Unknown 。这满足类型检查器的要求,因为 nullboolean | null 的有效值。