2013-02-14 70 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

相關問題