var.replace не является функцией

133

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

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

Редактировать:

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

Brett
источник
21
strнаверное, это не строка
Пекка
В стороне: вам не хватает кавычек вокруг самой regexстроки, что в любом случае может быть не очень хорошо.
Грант Томас,
4
@MrDisappointment В Javascript есть буквальные регулярные выражения - они не обязательно должны быть строкой
Гарет
1
@Closure: вы можете найти (или захотите начать) обсуждение на english.stackexchange.com/search?q=contractions
user113716
15
str.toString().replace(/^\s+|\s+$/g,'')Вместо этого используйте .
M Rostami

Ответы:

214

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

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

ClosureCowboy
источник
39
str.toString()исправил мою проблему.
Alper
Что ж, str.toString()это решение , только если вы передаете правильное значение, которое может быть успешно преобразовано в строку; в моем случае я вообще передавал не то. :)
Brett
Я также получаю ту же ошибку, я пробовал toString (), но получаю ошибку: не могу прочитать, свойство «toString» не определено и то же самое для «заменить»
Хитеш Кумар
90

возможные проблемы:

  • переменная ЧИСЛО (вместо строки);
    num=35; num.replace(3,'three'); =====> ERROR
    num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!
    num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
  • переменная - это объект (а не строка);
  • переменная не определена;
T.Todua
источник
1
Спасибо. За это я столкнулся с проблемой, где я получал String в объекте typeof. Я преобразовал этот объект с помощью toString (). И это работает! Спасибо!
Вишваджит Р. Шинде
14

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

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

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

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

Карима
источник
6

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

Медер Омуралиев
источник
6

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

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

    return str.replace(/^\s+|\s+$/g,'');
}
gion_13
источник
5

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

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

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


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

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

trim({});  // --> TypeError: str.replace is not a function
Дэйв Фогт
источник
5

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

var stringValue = str.toString();
return stringValue.replace(/^\s+|\s+$/g,'');
JC Gras
источник
3

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

user6619380
источник
1

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

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

Brett
источник
1
Вы можете отредактировать вопрос, это лучше, чем отвечать самому себе. О, и пока вы это делаете, выберите одного из хороших людей и примите их ответ. :-)
Christopher Creutzig
2
@ Кристофер: Нет; если он решил ее сам, он должен написать свой ответ и принять его. Это ТАКАЯ лучшая практика. Задавать ответы на вопросы и принимать произвольные ответы - нет.
Гонки легкости на орбите
@Tomalak: Здесь есть несколько правильных ответов, старше этого. Я согласен с тем, что принять ваш собственный ответ, если он первый правильный, - это хорошо ™, и, конечно же, я не хотел предлагать ставить решение в вопросе.
Кристофер Кройтциг
@Christopher: принятый ответ должен быть тем, который содержит решение, используемое OP.
Гонки за легкостью на орбите
0

убедитесь, что вы передаете строку методу "replace". Была такая же проблема, и я решил ее, передав строку. Вы также можете преобразовать его в строку, используя метод toString ().

Аяз-бен-Мухтар
источник