【问题标题】:Better way to check object property and call a method检查对象属性和调用方法的更好方法
【发布时间】:2013-01-07 18:13:11
【问题描述】:

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

我过去常常检查一个对象和方法是否存在,并以这种方式调用它:

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

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

我需要使用typeof undefined/function/object 进行检查吗?

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

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

【问题讨论】:

  • 仅当您怀疑 obj.method 可能不是函数时。
  • 你在 IE 中遇到什么错误?

标签: javascript typeof


【解决方案1】:

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

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

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

请注意,如果您尝试执行带有method 属性的数字0 或布尔值false 之类的奇怪东西,那么这将崩溃,但如果您将属性附加到布尔值,则可能会遇到更大的问题和数字。

【讨论】:

  • 如果object没有定义,会引发ReferenceError异常。
  • 现在它与OP的解决方案没有什么不同:)
  • 如果对象未定义,为什么不评估为假?又有什么区别 var object = object || {}; ?
  • @MartinBorthiry 未定义(如果您将其放入 if 语句中会引发异常,编辑可以防止)和 具有未定义值(在if 语句中计算为false)。
猜你喜欢
  • 2016-09-04
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 2018-07-04
  • 2019-03-08
相关资源
最近更新 更多