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

Javascript 检查对象属性和调用方法的更好方法,javascript,typeof,Javascript,Typeof,(对不起,如果之前有人查询过,我没有找到) 我过去常常检查对象和方法是否存在,并通过以下方式调用它: obj && obj.method && obj.method() 但是,我怀疑这在IE上造成了一些麻烦 是否需要使用未定义/函数/对象的类型检查它 typeof obj === 'object' && typeof obj.method === 'function' && obj.method() 我想知道最安全、最清晰的

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

我过去常常检查对象和方法是否存在,并通过以下方式调用它:

 obj && obj.method && obj.method()
但是,我怀疑这在IE上造成了一些麻烦

是否需要使用未定义/函数/对象的类型检查它

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

我想知道最安全、最清晰的编码方式是什么。

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

if (typeof object === 'object' && typeof object.method === 'function') {
    object.method();
}
您需要首先检查对象是否存在,然后确保所需的属性是函数。任何其他检查都是多余的


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

仅当您怀疑
obj.method
可能不是函数时。IE中会出现什么错误?如果未定义
object
,它将引发一个
ReferenceError
异常。现在它与OP的解决方案没有什么不同:)如果对象未定义,为什么不计算为false?var object=object |{}又有什么区别呢@MartinBorthiry未定义(如果将异常放在
if
语句中,则会引发异常,编辑会对此进行保护)和未定义值(在
if
语句中计算为
false
)之间有区别。