我按照本指南创建了一个新的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
?
(以下没有一种方法除了尝试抓一件作品)
尝试这样的事情:
if (typeof me.onChange !== "undefined") { // safe to use the function }
或更好(根据UpTheCreek赞成评论)
if (typeof me.onChange === "function") { // safe to use the function }
我有这个问题.
if (obj && typeof obj === 'function') { ... }
如果obj碰巧未定义,则不断抛出引用错误.
最后我做了以下几点:
if (typeof obj !== 'undefined' && typeof obj === 'function') { ... }
一位同事向我指出,检查是否存在!== 'undefined'
然后=== 'function'
当然是多余的.
更简单:
if (typeof obj === 'function') { ... }
更清洁,工作得很好.
如果你使用eval将字符串转换为函数,并且想要检查这个eval'd方法是否存在,那么你需要在eval中使用typeof和你的函数字符串:
var functionString = "nonexsitantFunction" eval("typeof " + functionString) // returns "undefined" or "function"
不扭转这种和尝试的typeof上EVAL.如果你做了一个ReferenceError将被抛出:
var functionString = "nonexsitantFunction" typeof(eval(functionString)) // returns ReferenceError: [function] is not defined
怎么样:
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文档.
没有看到这个建议:me.onChange && me.onChange(str);
基本上,如果me.onChange未定义(如果它尚未启动它将会是这样),那么它将不会执行后一部分.如果me.onChange是一个函数,它将执行me.onChange(str).
你甚至可以走得更远:
me && me.onChange && me.onChange(str);
如果我也是异步的.
尝试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
对我来说,最简单的方法是:
function func_exists(fname) { return (typeof window[fname] === 'function'); }