今天学习大佬的代码,对于其中出现的?,不明白意思,特发贴求助。
其中 onBeforeRouteUpdate((to)={
pageType.value = to?.meta?.type
})
这两个问号是什么意思?
今天学习大佬的代码,对于其中出现的?,不明白意思,特发贴求助。
其中 onBeforeRouteUpdate((to)={
pageType.value = to?.meta?.type
})
这两个问号是什么意思?
两次判断属性是否存在的意思,JavaScript的可选链写法。通过连接的对象的引用或函数可能是 undefined 或 null 时,可选链操作符提供了一种方法来简化被连接对象的值访问。
具体可看mdn
6 回答3.2k 阅读✓ 已解决
8 回答5k 阅读✓ 已解决
6 回答3.8k 阅读✓ 已解决
5 回答3k 阅读✓ 已解决
6 回答2.6k 阅读
9 回答2.4k 阅读
5 回答6.6k 阅读✓ 已解决
?.
是「可选链运算符 (Optional chaining)」,在有些语言中也称为「空条件运算符」,是 JavaScript 的语法,目前好像是在 Stage-4 阶段,还没正式发布。不过在 TypeScript 中已经是正式语法了。这个语法跟 Vue 无关。可选链运算是一种短路 (short-circuits) 运算,只要调用者是
null
或undefined
就直接返回undefined
,不会进行属性访问计算,也不会进行后续的计算。比如to?.meta.type
,如果to
是null | undefined
,那么就不会去取.meta
的值,更不会去算.type
;直接返回undefined
。那么为什么需要对
meta
也进行可选链运算呢?那是因为在to
有值的情况下,其meta
属性仍然可能无值,此时再对其取.type
仍然可能出现对undefined
取属性或者对null
取属性的错误。比如如果想判断某个属性是否存在于某个对象中,可以使用
in
运算,比如但是,如果
adventurer
为null | undefined
时,会报 TypeError。如果不清楚adventurer
是否有值的情况下,可以使用「空值合并运算符 (Nullish coalescing)」使用空对象代替,比如当然在多数时候用
?.
和undefined
来判断会更方便,比如回到问题中来,想知道
xname
是否存在,那就是