- Published on
JavaScript 中的空合并运算符
空合并运算符 ( ??
) 是 ES2020 中引入的一个逻辑运算符,当其左侧操作数为 null
或 undefined
。
这是一个逻辑运算符,它的返回值是 true
或 false
。
它与逻辑 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
的值,仅当左侧值为 null
或 undefined
时,它才返回右侧值。
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'
用法
如果变量是 null
或 undefined
,当想要返回默认值时,空合并运算符非常有用。
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
。这满足类型检查器的要求,因为 null
是 boolean | null
的有效值。