var.replace не является функцией - PullRequest
103 голосов
/ 23 января 2011

Я использую приведенный ниже код, чтобы попытаться обрезать строку в Javascript, но получаю ошибку, упомянутую в заголовке:

function trim(str) {
    return str.replace(/^\s+|\s+$/g,'');
}

Edit:

Я исправил проблему .... извините, мне следовало поставить код и для того, как я его тоже вызывал ... понял, что я случайно передал объект поля формы, а не его значение.

Ответы [ 9 ]

142 голосов
/ 23 января 2011

Я предполагаю, что код, вызывающий вашу trim функцию, , а не , фактически передающий ей строку.

Чтобы это исправить, вы можете сделать str строкой,как это: str.toString().replace(...)
... как alper указано ниже.

81 голосов
/ 08 сентября 2014

вероятные проблемы:

  • переменная NUMBER (вместо строки);
    num=35; num.replace(3,'three'); =====> ERROR
    num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!
    num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
  • переменная объект (вместо строки);
  • переменная не определена;
12 голосов
/ 07 сентября 2016

Заменить не заменит числа. Он заменяет только строки.

Это должно работать.

function trim(str) {
    return str.toString().replace(/^\s+|\s+$/g,'');
}

Если вы хотите только обрезать строку. Вы можете просто использовать "str.trim ()"

5 голосов
/ 23 января 2011

Вам, вероятно, следует выполнить некоторые проверки перед тем, как вы фактически выполните свою функцию:

function trim(str) {
    if(typeof str !== 'string') {
        throw new Error('only string parameter supported!');
    }

    return str.replace(/^\s+|\s+$/g,'');
}
5 голосов
/ 23 января 2011

Вы не передаете строку, иначе она будет иметь метод replace.Я надеюсь, что вы не набрали function trim(str) { return var.replace(blah); } вместо return str.replace.

4 голосов
/ 07 октября 2016

В случае числа вы можете попытаться преобразовать в строку:

var stringValue = str.toString();
return stringValue.replace(/^\s+|\s+$/g,'');
4 голосов
/ 23 января 2011

Вы правильно вызвали свою функцию? То есть. вещь, которую вы передаете как параметр, действительно строка?

В противном случае я не вижу проблем с вашим кодом - приведенный ниже пример работает как положено

function trim(str) {
    return str.replace(/^\s+|\s+$/g,'');
}


trim('    hello   ');  // --> 'hello'

Однако, если вы называете свой functoin чем-то нестроковым, вы действительно получите ошибку выше:

trim({});  // --> TypeError: str.replace is not a function
2 голосов
/ 21 июля 2016

Вы должны использовать метод toString () java-скрипта для преобразования в строку раньше, потому что метод replace - это строковая функция.

0 голосов
/ 23 января 2011

Я исправил проблему .... извините, мне следовало поставить код и для того, как я его тоже вызывал ... понял, что я случайно передал объект поля формы, а не его значение.

Спасибо за ваши ответы в любом случае. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...