当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何检查JavaScript中是否存在函数?》经验,为你挑选了7个好方法。

我按照本指南创建了一个新的JS到Flash通信.

我的代码是

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

(以下没有一种方法除了尝试抓一件作品)



1> Andrew Hare..:

尝试这样的事情:

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

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

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


==='function'会比!='undefined'更好
@UpTheCreek,作为一般解决方案会有点危险,因为旧版本的IE将某些功能视为对象,例如`typeof window.alert ==='object'.
@James,因为该语句实际上在JavaScript中抛出了一个`undefined`异常.我尝试过这个.
@BornToCode因为那时`me.onChange`可以是评估为'true`的任何东西,不一定是函数(例如它可以是布尔值,字符串等).例如,请参阅http://jsfiddle.net/j5KAF/1/

2> Misha Nasled..:

我有这个问题.

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

如果obj碰巧未定义,则不断抛出引用错误.

最后我做了以下几点:

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

一位同事向我指出,检查是否存在!== 'undefined'然后=== 'function'当然是多余的.

更简单:

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

更清洁,工作得很好.



3> dhulihan..:

如果你使用eval将字符串转换为函数,并且想要检查这个eval'd方法是否存在,那么你需要在eval中使用typeof和你的函数字符串:

var functionString = "nonexsitantFunction"
eval("typeof " + functionString) // returns "undefined" or "function"

不扭转这种和尝试的typeofEVAL.如果你做了一个ReferenceError将被抛出:

var functionString = "nonexsitantFunction"
typeof(eval(functionString)) // returns ReferenceError: [function] is not defined


eval == evil;)
你可以不用eval做到这一点.示例:```var a ='alert'; window [a]('it works');```

4> Nasser Al-Wo..:

怎么样:

if('functionName' in Obj){
    //code
}

例如

var color1 = new String("green");
"length" in color1 // returns true
"indexOf" in color1 // returns true
"blablabla" in color1 // returns false

或者就你的情况而言:

if('onChange' in me){
    //code
}

请参阅MDN文档.


这个线程的最佳解决方案,最短,最干净.

5> Samir Alajmo..:

没有看到这个建议:me.onChange && me.onChange(str);

基本上,如果me.onChange未定义(如果它尚未启动它将会是这样),那么它将不会执行后一部分.如果me.onChange是一个函数,它将执行me.onChange(str).

你甚至可以走得更远:

me && me.onChange && me.onChange(str);

如果我也是异步的.



6> Mat Carlson..:

尝试typeof- 寻找'undefined'说它不存在,'function'为一个功能.这个代码的JSFiddle

function thisishere() {
    return false;
}
alert("thisishere() is a " + typeof thisishere);
alert("thisisnthere() is " + typeof thisisnthere);

或者作为if:

if (typeof thisishere === 'function') {
    // function exists
}

或者使用返回值,在一行上:

var exists = (typeof thisishere === 'function') ? "Value if true" : "Value if false";
var exists = (typeof thisishere === 'function') // Returns true or false



7> 小智..:

对我来说,最简单的方法是:

function func_exists(fname)
{
  return (typeof window[fname] === 'function');
}

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有