当要测试的变量为 null 时,JavaScript 中的可选链接返回 undefined 而不是 null

Sev*_*ven 6 javascript optional-chaining

所以,我正在阅读 JavaScript 中的可选链,一个问题突然出现在我的脑海中。

考虑下面的代码:

let person = null
let street = person?.street // returns undefined
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果变量personnull从变量开始的,那么为什么要进行可选链接结果将变量设置为undefined而不是null

如果这个人是undefined,那么我想,对我来说,将其设置为undefined是合理的,因为变量当然是undefined,如下所示:

let person
let street = person?.street // returns undefined 
Run Code Online (Sandbox Code Playgroud)

PS:如果这是一个愚蠢的问题,我很抱歉,如果有人同意我会删除它。:)

PPS:如果这个问题重复,请删除链接,我会尝试一下。非常感谢。

Ber*_*rgi 7

可选链不会评估访问属性时的空值,而是评估undefined- 就像undefined对象中不存在属性时所得到的那样。

person?.street从概念上讲,不认为

person && person.street
Run Code Online (Sandbox Code Playgroud)

而是作为

(person ?? {}).street
Run Code Online (Sandbox Code Playgroud)

虽然准确(特别是当进一步链接时,因为它确实短路而不是评估链的其余部分),但它确实是

person != null ? person.street : undefined
Run Code Online (Sandbox Code Playgroud)

另请参阅有关可选链提案的常见问题解答:

为什么(null)?.b评估为undefined而不是null

也不a.ba?.b为了保留有关基础对象的任意信息a,而只是为了提供有关该对象的属性的信息"b""b"如果中不存在某个属性,则这会通过和a反映出来。a.b === undefineda?.b === undefined

特别是,该值null被认为没有属性;因此,(null)?.bundefined