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


133

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

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

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

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


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(...)
... а Альпер отметил ниже.


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 !!!!!!
  • переменная - это объект (а не строка);
  • переменная не определена;

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,'');
}

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,'');

3

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


1

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

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


1
Вы можете отредактировать вопрос, это лучше, чем отвечать самому себе. О, и пока вы это делаете, выберите одного из хороших людей и примите их ответ. :-)
Christopher Creutzig

2
@ Кристофер: Нет; если он решил ее сам, он должен написать свой ответ и принять его. Это ТАКАЯ лучшая практика. Задавать ответы на вопросы и принимать произвольные ответы - нет.
Гонки легкости на орбите

@Tomalak: Здесь есть несколько правильных ответов, старше этого. Я согласен с тем, что принять ваш собственный ответ, если он первый правильный, - это хорошо ™, и, конечно же, я не хотел предлагать ставить решение в вопросе.
Кристофер Кройтциг

@Christopher: принятый ответ должен быть тем, который содержит решение, используемое OP.
Гонки за легкостью на орбите

0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.