vue js 可选链报错问题?

const name = undefined
console.log('🚀 ~ mounted ~ name', name?.()) // undefined
const name = 'mike'
console.log('🚀 ~ mounted ~ name', name?.()) // TypeError: name is not a function

这是为什么呢....

阅读 2.3k
4 个回答
✓ 已被采纳

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...

你的代码等价于

const name = 'mike'
if(name){//name是个字符串所以这里为true
    console.log('🚀 ~ mounted ~ name', name.()) //name只是个字符串,所以这时报错
}

如果只是判断是否为函数可以参考如下代码:
typeof xxx === 'function' && xxx()

推荐问题
logo
Microsoft
子站问答
访问
宣传栏