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
)之间有区别。