检查对象属性和调用方法的更好方法

Mar*_*iry 3 javascript typeof

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

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

 obj && obj.method && obj.method()
Run Code Online (Sandbox Code Playgroud)

但是,我怀疑在某些情况下这会给IE带来一些麻烦..

我需要使用它typeof undefined/function/object 吗?

 typeof obj === 'object' && typeof obj.method === 'function' && obj.method()
Run Code Online (Sandbox Code Playgroud)

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

jba*_*bey 5

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

if (typeof object === 'object' && typeof object.method === 'function') {
    object.method();
}
Run Code Online (Sandbox Code Playgroud)

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

请注意,如果您有一些奇怪的东西,比如数字0或布尔值false,并且method您正在尝试执行该属性,但如果您将属性附加到布尔值和数字,则可能会遇到更大的问题.