2013-02-14 65 views
1

我正在尝试为Google文档电子表格创建一个自定义函数。我觉得这是一个非常简单的问题,而且我很快就摆脱了我的深度。 请帮帮我。一个正确的方向将非常感激。TypeError:无法调用未定义的方法“替换”

的googledocs脚本编辑器给出了这样的错误:

TypeError: Cannot call method "replace" of undefined. (line 50)

对于此代码:

function replaceGender(name, gender, comment) { 

     var genderedComment = String(); 
     var name; 
     var gender; 
     var comment; 

     if(gender == "m") 
     { 
      genderedComment = ungenderedComment.replace("(name)", name).replace(/\(He\/She\)/g,"He").replace(/\(His\/\Her\)/g,"His").replace(/\(his\/\her\)/g,"his").replace(/\(him\/\her\)/g,"him").replace(/\(he\/\she\)/g,"he"); 
     } 
     else 
     { 
      genderedComment = ungenderedComment.replace("(name)", name).replace(/\(He\/She\)/g,"She").replace(/\(His\/\Her\)/g,"Her").replace(/\(his\/\her\)/g,"her").replace(/\(him\/\her\)/g,"her").replace(/\(he\/\she\)/g,"she"); 
     } 

     return genderedComment; 
}; 

我认为它很容易,但我做错了什么。

我已经更改了代码,现在它的工作原理没有错误,但最后的.replace(/\(he\/\she\)/g,"she");.replace(/\(he\/\she\)/g,"he"); 不能代替。不知道... 再次感谢您的所有帮助...正如我所说的即时通讯学习很多。

这里现在

function replaceGender(name, gender, comment) { 

    if(gender == "m") 
    { 
    comment = comment.replace(/\(name\)/g, name).replace(/\(He\/She\)/g,"He").replace(/\(His\/\Her\)/g,"His").replace(/\(his\/\her\)/g,"his").replace(/\(him\/\her\)/g,"him").replace(/\(he\/\she\)/g,"he"); 
    } 
    else if(gender == "f") 
    { 
    comment = comment.replace(/\(name\)/g, name).replace(/\(He\/She\)/g,"She").replace(/\(His\/\Her\)/g,"Her").replace(/\(his\/\her\)/g,"her").replace(/\(him\/\her\)/g,"her").replace(/\(he\/\she\)/g,"she"); 
    } 

    return comment; 
}; 
+0

变量'ungenderedComment'未定义。这意味着你不能像字符串一样通过调用字符串函数来处理它。您应该首先进行测试以确保其已定义。您应该检查以确保它不是未定义的,或者在代码中添加一个“else if”。实际上,正如PaulHoencke指出的,你可能完全使用了错误的变量! – jahroy 2013-02-14 02:43:08

+0

除非有一些代码没有显示,'ungenderedComment'没有定义,就像错误说的那样。 – 2013-02-14 02:43:14

+0

看起来也许你应该用'comment'替换'ungenderedComment',因为这是函数参数的名字。 – 2013-02-14 02:45:48

回答

0

没有定义你的命名ungenderedComment变量的代码。


您可以测试是否一个变量是未定义这样的:

if (typeof someVariable === 'undefined') { 
    alert("variable is undefined"); 
} 

或者这样:

if (! someVariable) { 
    alert("variable is either undefined, null, false, zero, or some falsey value"); 
} 

编辑:的评论指出, ,它看起来像你正在使用错误的变量!

+1

哇,这是我第一次使用stackoverflow,什么是快速响应......虐待今天尝试这些建议。谢谢!!!! – schmitzkr 2013-02-14 05:26:47

1

实际上有几个问题,除了未定义的错误。你不想在函数的顶部声明这些变量,因为你需要的东西已经传递给了函数。

function replaceGender(name, gender, comment) { 
    var genderedComment; 

    if(gender == "m") 
    { 
    genderedComment = comment.replace("(name)", name).replace(/\(He\/She\)/g,"He").replace(/\(His\/\Her\)/g,"His").replace(/\(his\/\her\)/g,"his").replace(/\(him\/\her\)/g,"him").replace(/\(he\/\she\)/g,"he"); 
    } 
    else 
    { 
    genderedComment = comment.replace("(name)", name).replace(/\(He\/She\)/g,"She").replace(/\(His\/\Her\)/g,"Her").replace(/\(his\/\her\)/g,"her").replace(/\(him\/\her\)/g,"her").replace(/\(he\/\she\)/g,"she"); 
    } 

    return genderedComment; 
}; 
+0

定义与参数匹配的变量不成问题。声明被忽略。 – 2013-02-14 02:58:48

+0

@thesystem你是对的,这里是一个[很好的解释](http://stackoverflow.com/a/662884/834178)。但我无法想象这是一个很好的做法,即使它被忽略了。 – 2013-02-14 03:06:58

相关问题