2013-02-14 3 views
1

Я пытаюсь создать пользовательскую функцию для электронной таблицы документов Google. Я чувствую, что это действительно простая проблема, и я быстро ушел из глубины. Пожалуйста, помогите мне. Точка в правильном направлении была бы высоко оценена.ТипError: Не удается вызвать метод «replace» undefined

Редактор 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'. Фактически, как указал Полхоенке, вы, вероятно, используете неправильную переменную вообще! – jahroy

+0

Если код не отображается, 'ungenderedComment' не определен, как говорит ошибка. –

+0

Похоже, что вам стоит заменить 'ungenderedComment' на' comment', так как это имя аргумента функции. –

ответ

0

Ваша переменная с именем ungenderedComment не определен.


Вы можете проверить, чтобы увидеть, если переменная не определена следующим образом:

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

Или так:

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

EDIT: как комментарии указывают , похоже, что вы используете неверную переменную вообще!

+1

Вау, это мой первый раз, когда я использовал stackoverflow, какой быстрый ответ ... плохо попробуйте эти предложения сегодня. Благодаря!!!! – schmitzkr

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

Определение переменных, соответствующих параметрам, не является проблемой. Объявления просто игнорируются. –

+0

@thesystem Вы правы, и вот [хорошее объяснение] (http://stackoverflow.com/a/662884/834178). Но я не могу представить, что это хорошая практика, даже если она игнорируется. –

Смежные вопросы