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

这是为什么呢....


回答:

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


回答:

可选链是为了防止引用undefinednull,不是让你这么用的
https://developer.mozilla.org...


回答:

你的代码等价于

const name = 'mike'

if(name){//name是个字符串所以这里为true

console.log('? ~ mounted ~ name', name.()) //name只是个字符串,所以这时报错

}


回答:

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

以上是 vue js 可选链报错问题? 的全部内容, 来源链接: utcz.com/p/933613.html

回到顶部