先定义是一个二元操作符,只有在第一个操作对象为 null 或 undefined 时才会返回第二个操作对象。
let a = nulla ?? 10 // => 10
对于上面的例子,先定义又类似于三元操作符。
let a = nulla === null || a === undefined ? 10 : null // => 10
但是,对于下面的情况,先定义与逻辑或有着明显的区别。
let start = nulllet o = {title: \'\',maxWidth: 120,visited: false}let max = start ?? o.title ?? o.visited ?? o.maxWidth ?? 500 // => \'\'
start 为 null,先定义不会返回它。但是对于逻辑与,start 为 null 、title 为空字符串(或者为0),都将被是作为假值,不会返回它们,所以最终返回的是 120 。
let max = start || o.title || o.visited || o.maxWidth || 500 // => 120
先定义与逻辑与在不同的情况下进行选择。