3

(对不起,如果之前查询过,我没有找到)

我曾经检查一个对象和方法是否存在并以这种方式调用它:

 obj && obj.method && obj.method()

但是,我怀疑某些情况下这会在 IE 上造成一些麻烦。

我需要检查它typeof undefined/function/object 吗?

 typeof obj === 'object' && typeof obj.method === 'function' && obj.method()

我想知道什么是最安全和最清晰的编码风格。

4

1 回答 1

5

为确保您可以正确执行在名为method的对象上命名的方法object,这是最短的安全检查:

if (typeof object === 'object' && typeof object.method === 'function') {
    object.method();
}

您需要首先检查该对象是否存在,然后确保您想要的属性是一个函数。任何其他检查都是多余的。

请注意,如果您尝试执行的属性有一些奇怪的东西,例如数字0或布尔值,那么这将分崩离析,但如果您将属性附加到布尔值和数字,则可能会遇到更大的问题。falsemethod

于 2013-01-07T18:18:21.587 回答