vue js 可选链报错问题?

作者站长头像
站长
· 阅读数 6
const name = undefined
console.log('🚀 ~ mounted ~ name', name?.()) // undefined
const name = 'mike'
console.log('🚀 ~ mounted ~ name', name?.()) // TypeError: name is not a function

这是为什么呢....

回复
1个回答
avatar
test
2024-07-10

Optional Chaining 只负责null/undefined判断,不负责判断它是不是function。如果anullundefined也非functiona?.()就会抛出错误。

a?.b                          // undefined if `a` is null/undefined, `a.b` otherwise.
a == null ? undefined : a.b

a?.[x]                        // undefined if `a` is null/undefined, `a[x]` otherwise.
a == null ? undefined : a[x]

a?.b()                        // undefined if `a` is null/undefined
a == null ? undefined : a.b() // throws a TypeError if `a.b` is not a function
                              // otherwise, evaluates to `a.b()`

a?.()                        // undefined if `a` is null/undefined
a == null ? undefined : a()  // throws a TypeError if `a` is neither null/undefined, nor a function
                             // invokes the function `a` otherwise

参见提案:https://github.com/tc39/propo...

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容