如何检查 JavaScript 中是否存在函数?

新手上路,请多包涵

我的代码是

function getID( swfID ){
     if(navigator.appName.indexOf("Microsoft") != -1){
          me = window[swfID];
     }else{
          me = document[swfID];
     }
}

function js_to_as( str ){
     me.onChange(str);
}

但是,有时我的 onChange 不会加载。 Firebug 错误与

me.onChange 不是函数

我想优雅地降级,因为这不是我程序中最重要的功能。 typeof 给出了同样的错误。

关于如何确保它存在然后只执行 onChange 的任何建议?

(除了 try catch 一项工作外,没有以下方法)

原文由 Alec Smart 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 979
2 个回答

尝试这样的事情:

 if (typeof me.onChange !== "undefined") {
 // safe to use the function
 }

或者更好(根据 UpTheCreek 赞成的评论)

 if (typeof me.onChange === "function") {
 // safe to use the function
 }

原文由 Andrew Hare 发布,翻译遵循 CC BY-SA 3.0 许可协议

我有这个问题。 if (obj && typeof obj === 'function') { ... } 如果 obj 恰好是 undefined --- 则一直抛出引用错误,所以最后我做了以下操作:

 if (typeof obj !== 'undefined' && typeof obj === 'function') { ... }

但是,一位同事向我指出,检查它是否 !== 'undefined' 然后 === 'function' 是多余的,因此:

更简单:

 if (typeof obj === 'function') { ... }

更干净,效果很好。

原文由 Misha Nasledov 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题